文件操作的常用方法和使用

文件操作的常用方法

1、打开文件

1.os.mknod("test.txt") #创建空文件
2.f = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件
3.关于open 模式:

w:以写方式打开,
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )

2、读

read        读取整个文件

f = open('doubi.txt', 'r+', encoding='utf-8')
data = f.read()
print(data)

#执行结果为:
peiqi.abc123.21.chengguan
alex.abc123.24.IT
gangniang.abc123.27.dachu

f = open('doubi.txt','r')

for line in f:
    Print(line) 

也可以用readline和readlines

readline    只读一行,遇到\r or \n为止

f = open('doubi.txt', 'r+', encoding='utf-8')
data=f.readline()
data1=f.readline()
data2=f.readline()
print(data)
print(data1)
print(data2)

#结果为:                                 
peiqi.abc123.21.chengguan    

alex.abc123.24.IT

gangniang.abc123.27.dachu     

readlines   读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便)

f = open('doubi.txt', 'r+', encoding='utf-8')
data=f.readlines()
print(data)
print(type(data))

#执行结果为:
['peiqi.abc123.21.chengguan\n', 'alex.abc123.24.IT\n', 'gangniang.abc123.27.dachu\n']
<class 'list'>

另外需要注意的是read是按字符读取,tell和seek是按照字节  切记否则是坑

tell
1. 作用:获取当前文件读取指针的位置

2. 语法格式: file.tell() 注: 此方法没有参数

seek
1. 作用:用于移动文件读写指针到指定的位置
2. 语法格式:file.seek(offset, whence=0):
--> offset: 偏移量,需要向前或者是向后移动的字节数
--> whence: 可选值,默认为0, 可选值为1或者2,表示从何处开始计算偏移,具体来说,
  --> 0表示从当前位置开始计算偏移
  --> 1表示从文件头位置开始计算偏移
  --> 2表示从文件尾开始计算偏移
f = open('doubi.txt', 'r+', encoding='utf-8')
f.seek(3)            #表示向前移动3个字节
data = f.tell()     #获取当前指针位置
print(data)
f.close()

#结果为
3


# f.seek(0,0)            #表示将文件指针移动到文件头处
# f.tell()
#
# f.seek(0,2)            #表示将文件读取指针移动到文件尾部
# f.tell()
 注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
 如“你好啊” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“好”和“啊”两个字中间。
但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了,少了一个字节。

3、写入

close 是关闭文件的时候才进行保存(将数据从内存中写入硬盘)

f = open('doubi.txt', 'r+', encoding='utf-8')
f.seek(9)
f.write('')                       
f.close()                            

flush 把文件从内存buffer里强制刷新到硬盘,多用于循环。

 4、其他

 readable(self, *args, **kwargs): 
        判断是否可读
 seekable(self, *args, **kwargs)
        判断文件是否可进行seek操作
 writable(self, *args, **kwargs): 
        判断文件是否可写

 truncate(self, *args, **kwargs):
        按指定长度截断文件,类似于删除,从指定位置开始往后删除。
        *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

    
 
 

猜你喜欢

转载自www.cnblogs.com/dexterfan/p/9583347.html
今日推荐