• python中的文件操作


    文件的操作

    文件操作时,python首先会拿到文件的句柄;

    f=open('filename','w',encoding='utf8')  #写模式打开文件,拿到文件句柄;f为文件句柄
    f=f.read()                     # 读文件内容
    f.close()                      # 关闭文件,务必要关闭
    

    文件打开模式:

    写的时候,光标永远都在最后;
    r	读模式,只读,不可写;
    w	写模式,当文件写模式时,就会把原来的数据格式化,然后从0位置开始写;不可读
    a	append,追加模式,只可在最后追加内容;不可读
    r+  读写模式,类似a模式
    w+  写读模式,也是先清空,然后写,和w模式的区别是可读。
    a+  和a模式的区别的可读。默认光标位置是最后
    x	create a new file and open it for writing
    b	二进制模式
    t	text模式(default)
    +	open a disk file for updating(reading and writing)
    u	universal newline mode(deprecated)
    

    文件按行读:

    f=open('filename','w',encoding='utf8') 
    f=f.readline()	#从第一行开始读,每执行一次readline就往下移动一行;python中,read到哪个位置,光标就移动到了那里;再读就从光标往后读;
    f.readlines()	#会把全文变成列表;每行是一个元素;
    
    for i in f.readlines():
        print(i.strip())
    #最好不要这样,因为如果文件很大,f.readlines会全部读取到内存,会搞死内存;可以这样:
    for i in f:
        print(i.strip())
    # 这里的for循环会 自动把 f做成一个迭代器,每循环一次,从f文件中取一次;
    

    f.tell()     告诉我光标当前所在的位置。字符和当前字符编码有关。 f.seek(0)    光标回到0位置 f.truncate()   截断,需要在文件为a模式才有意义

    终极问题:如何修改一个文件

    由于磁盘存储机制,直接修改实现不了。只能先生成副本,然后想法删除旧文件,把新副本名字改回去。
    
    f_read=open('小重山','r',encoding='utf8')
    f_write = open('小重山2','w',encoding='utf8')
    
    number=0
    for line in f_read:
        number+=1
        if number==5:
            line=''.join([line.strip(),'alex
    '])
            # line='hello 岳飞
    '
        f_write.write(line)
    
    f_read.close()
    f_write.close()
    

    因为文件中只能存储字符串,所以假如有字典要存储在文件中,需要先将字典转换为字符串;用的时候需要使用eval转换回默认类型;如:

    a={'beijing':{'1':10000}}    #a为一个字典
    a=str(a)                     #强转为字符串 '{'beijing':{'1':10000}}'
    #这样等把a从文件中取出来时,还是字符串,不能使用字典的方法。要转回字典:
    a=eval(a)
    

    如果打开一个文件,忘记关闭了,怎么办?with方法可以解决。

    f=open('log','r')     
    # 等效于
    with open('log','r') as f:
    

    并且with中,可以同时打开两个文件,拿到两个文件句柄:

    with open('log1','r') as f1,open('log2','w') as f2:
    如需转载,请注明出处,否则本人会追究法律责任!
  • 相关阅读:
    LeetCode周赛#209
    CodeBlocks相关配置
    LeetCode双周赛#36
    LCCUP 2020 秋季编程大赛 补题
    while和do while区别
    完全背包--piggy-bank
    数组定义在哪里???重要!!!
    01背包---点菜问题
    java源程序命名规则
    hdu1159-----最长公共子序列LCS
  • 原文地址:https://www.cnblogs.com/hacker001/p/10081736.html
Copyright © 2020-2023  润新知