1. txt格式
参考于:廖雪峰python 文件读写
读:
以读文件的模式打开一个文件对象,Python内置的open()函数
f = open('txt文件地址', '打开模式(默认为’r‘)', encoding='文件编码(默认为gbk编码)' , errors='ignore')
打开模式:
r 以只读方式打开文件。这是默认模式。文件必须存在,不存在抛出错误
rb 以二进制格式打开一个文件用于只读。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。读完就追加。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
errors='ignore': (可以不使用)
遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略ignore
如果文件不存在,open()函数就会抛出一个IOError的错误
如果文件打开成功,接下来
- 调用read()方法可以一次读取文件的全部内容,Python把内容读到内存(建议读取小文件),用一个str对象表示,可以反复调用read(size)方法,每次最多读取size个字节的内容。
- 调用readline()可以每次读取一行内容,返回一个字符串对象
- readlines()方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存
- 最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
- Python引入了with语句来自动帮我们调用close()方法
例如:
f=open('text.txt','r',encoding='UTF-8')
#print(f.read())
print(type(f.readline())) #<class 'str'>
for line in f.readline():
print(type(line)) #<class 'str'>
print(type(f.readlines())) #<class 'list'>
for line in f.readlines():
print(type(line)) # <class 'str'>
f.close()
============================================================================
with open('test.txt', 'r') as f: #该方式能自动调用close()方法
print(f.read())
for line in f.readline():
print(line)
for line in f.readlines():
print(line)
写:
f = open('文件地址', '写入模式', encoding='指定编码’)
写入模式:
r 以只读方式打开文件。这是默认模式。文件必须存在,不存在抛出错误
rb 以二进制格式打开一个文件用于只读。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。读完就追加。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是`在这里插入代码片`说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
f.write(‘写入的内容’)
可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。
也可以使用with open(‘文件地址’, ‘w’) as f: 来自动关闭
例如:
f=open('text.txt','w')
f.write("hello!")
f.close()
with open('text.txt','w') as T: #该种方式会自动关闭打开的文本
T.write("hello!")
2. docx格式
python读取docx文件有专门的docx模块
安装:pip install python-docx
具体使用方式可以查看:python-docx用户指南
这里只介绍简单的读取,对于docx文本的写入处理并不便捷(涉及到段落,标题,缩进,对齐,间距,分页等),有需要的朋友可以在上述的官方文档中了解更多,而我更倾向于对docx文件借助txt文本(存入或读取)进行处理。
以下的读取方式并不是官方读取方式:
import docx
fullText = [] #创建一个空list,用于存储读取的文本
doc = docx.Document('text.docx')
#print(doc) <docx.document.Document object at 0x000002A76F1D5C60>
#print(type(doc)) <class 'docx.document.Document'>
paras = doc.paragraphs #读取文本的每一段
print(paras) #一个list,元素为每一段的地址
for p in paras:
fullText.append(p.text) #这样就能将该文本逐段存入一个list中
print('\n'.join(fullText))
3. csv格式
其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔。
python csv模块官方文档
使用csv读取csv文件:
import csv
data=[]
with open('text2.csv','r') as csvfile:
#参数“r”,为读取状态,若为“rb”,则表示读取二进制文件;若为“rt”,则为读取文本模式
reader = csv.reader(csvfile)
#reader()逐行读取
#print(reader) <_csv.reader object at 0x000001F038368CE0>
#print(type(reader)) <class '_csv.reader'>
for rows in reader:
data.append(rows)
print(data[2]) #打印csv文件第三行
使用csv写入csv文件:
import csv
list1=['hello','world']
with open('test1.csv', 'a', newline='')as csvFile:
# 模式'a',追加内容,"newline="就是说因为我们的csv文件的类型,如果不加这个东西,当我们写入东西的时候,就会出现空行
writer = csv.writer(csvFile,delimiter='\t')
#delimiter='\t',分隔符,csv中默认以逗号为每列数据分隔符
writer.writerow("writerow写入")
writer.writerow(list1)
# 写入一行用writerow,多行用writerows
writer.writerow("writerows写入")
writer.writerows(list1)
csvFile.close()
#如果通过writerow写入str,则str中每个字符都会被以分隔符隔开
#要避免这种情况,可以先将str存入一个list中,再通过writerow写入lsit
关于newline=''的解释参考:python open函数newline用法
写入结果:
其它文本格式操作,未完待续。。。