一、python 中打开文件,
python中读写txt文件,首先得打开文件,即使用open()函数,
lastpath1 = r'D:\apache-jmeter-4.0\bin\srcWaveId.txt'
file1 = open(lastpath,'r'')
可以使用不同的模式打开文件,如:r,r+,w,w+,a,a+,它们的区别如下:
注意:write()会创建文件
二、文件读取
python常用的读取文件函数有三种read()、readline()、readlines()*
(1)、read() 一次性读全部内容 一次性读取文本中全部的内容,以字符串的形式返回结果
path1=r'D:\Document\test.txt'
file1=open(path1,'r')
content1=file1.read()
print(content1)
file1.close() #使用完毕后关闭文件
(2)、readline() 一行一行读取文件内容,调用几次读取几行,以字符串的形式返回结果
path2=r'D:\Document\test.txt'
file2=open(path1,'r')
content2=file2.readline() #读取第1行文件的内容
content2=file3.readline() #读取第2行文件的内容
print(content2)
print(content2)
file2.close() #文件打开,使用完毕后需要关闭
(3)、readlines()读取文本所有内容,并且以列表的形式返回结果
path3=r'D:\Document\test.txt'
file3=open(path3,'r')
content3=file3.readlines()
print(content3)
file3.close() #文件打开,使用完毕后需要关闭
返回结果:
['one\n', 'two\n', 'three\n', 'four\n', 'five']
因readlines()会读到换行符,所以一般配合for in使用去除换行符,循环遍历文件中所有行并输出
f = open("test.txt", "r")
for line in f.readlines():line = line.strip('\n') #去掉列表中每一个元素的换行符print(line)f.close()
三、文件写入
常用函数:write()
1、文件中写入内容,首先需要打开文件
2.wirte()写入后默认不换行,如果想换行则需要加入换行符\n
即可
path2 = r'D:\Document\test2.txt'
file2 = open(path2,'w+')
file2.write('aaa') #wirte()写入后默认不换行
file2.write('bbb\n') #加入换行符进行换行
b = 'ccc'
file2.write(b)
四、文件关闭
文件打开最后需要关闭,常用函数为close()。
还可以使用with open不需要写close()方法
#使用with执行完文件操作后自动关闭文件,不用再调用close(),as为重命名
with open(r'F:\jupyter notebook files\text files.txt','r') as f: contents=f.read()print(contents)
五、文件删除
如需删除文件,必须导入 OS 模块,并运行其 os.remove() 函数;
为避免出现错误,可以在删除文件之前检查该文件是否存在:
import osif os.path.exists(r'D:\HK 711.txt'): #判断文件是否存在os.remove(r'D:\HK 711.txt') #删除文件
else:print("The file does not exist")
若删除文件目录,则使用os.rmdir()
方法,但是只能删除空文件夹
mport osos.rmdir(r'D:\a')
六、清空文件内容
使用file.truncate()方法清空文件内容
file1 = open(r'D:\1.txt','a+') #注意清空文件内容需要写权限
file1.truncate(0) #参数0表示从文件开头位置截断内容,也即清空,如果为2,表示文件清除后保留2个字符
file1.close()
七、读取文件行数
函数:len()
file6 = open(r'D:\Document\Workspace\SQLEdit\result.txt', 'r')
j = file6.readlines()
print(j)
print(len(j))
八、文件读写机制
如下代码,当执行完成后会发现,打印内容为空,也没有报错
file01 = open(r'D:\Document\Workspace\result.txt', 'w+')
file01.write('aaa')
content = file01.readlines()
print(content)
这是为什么呢?
文件读写机制:当一个文件被读或者写一次后,文件中类指针的东西指向的是整个文件的末尾,再次读时从末尾开始读的话肯定
是什么都读不到了。如何写完了接着读呢?加上f.seek(0)使得类指针的东西回到文件的开头然后从头开始读即可。
如下代码,加上seek()函数让光标回到首位,可以打印出内容。
file01 = open(r'D:\Document\Workspace\result.txt', 'w+')
file01.write('aaa')
file01.seek(0) #文件1光标移到首位
content = file01.readlines()
print(content)
九、踩坑
1、每执行完一种增删改操作,需要重新open file
如下代码,当不重新打开文件f5,而直接在f4上truncate(0),没有实际效果
with open(curdirpath + '/dest.txt', 'r') as f4:print('start')file4Content = f4.read()print(file4Content)print('end')self.textBrowser.setText(file4Content)with open(curdirpath + '/dest.txt', 'a+') as f5:f5.truncate(0)
2、程序执行后报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 217: illegal multibyte sequence
解决方案:加上编码方式encoding=‘UTF-8’
file1 = open(r'D:\HK 711.txt','r',encoding='utf-8')
line1 = file1.readline()
line2 = file1.readline()
print(line1)
print(line2)
file1.close()