python读写不同格式文本方法

本文介绍了Python如何读写txt、docx和csv格式的文本。对于txt,讲解了read(), readline(), readlines()等方法;docx部分提到了python-docx模块,建议通过txt处理docx;csv部分则介绍了python的csv模块用于读写表格数据。" 84725854,6649953,NPOI Cell Comment限制与异常处理,"['Excel处理', 'POI', 'NPOI库', '数据操作', '编程异常']
摘要由CSDN通过智能技术生成

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用法
写入结果:
在这里插入图片描述

其它文本格式操作,未完待续。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值