关于读取文件的一些小细节的总结
python中文件的读取写入比较方便,当时难免在使用的时候回出现错误,接下来就对该内容做一个总结
- 获取系统默认编码
import sys
print(sys.getdefaultencoding())
输出结果:
utf-8
#type : str
在读取文本的时候,会使用系统默认的编码但是呢,我们也可以自己更改编码格式。
open('XXX', encoding='utf-8')
python支持非常多的文本编码,几个常见的编码是ascii,latin-1,utf-8等,latin-1是字节0-255到U+0000到U+00FF范围内Unicode字符串直接映射,使用该编码永远不会得到出现解码错误。使用latin-1编码读取一个文件的时候 也许不能产生完全正确的文本解码数据, 但是它也能从中提取出足够多的有用数据。同 时,如果你之后将数据回写回去,原先的数据还是会保留的。
默认情况下,Python会以统一模式处理换行符。 这种模式下,在读取文本的时候, Python可以识别所有的普通换行符并将其转换为单个 \n 字符。 类似的,在输出时会将 换行符 \n 转换为系统默认的换行符。 如果你不希望这种默认的处理方式,可以给 open() 函数传入参数 newline=’’ ,就像下面这样:
出现编码错误
可以使用如下这种方式:
f = open('XXX.txt', 'r', encoding='ascill', errors='replace)
f.read()
#####
g = open('XXX.txt', 'w', encoding='ascill', errors='ignore')
errors参数一般处理编码错误会使用默认的编码通常是(‘utf-8’)
打印输出至文件中
使用print函数的输出重定向到一个文件中去,使用print中的file关键字采纳数
with open('', 'w') as fp:
print('hello world', file=fp)
这样就可以将文本写入文件了。
print()函数参数
- sep 控制字符间的字符
- end控制字符结尾字符
- join函数,和sep使用方法一样,不过str.join()join的参数只能是字符串
#使用该函数需要经过特殊的处理
print(','.join(str(x) for x in row))
字节文本的使用
b = b'Hello World'
for c in b:
print(c)
输出结果为:
72
101
108
108
111
32
87
111
114
108
100
如果想要从二进制文本中读取或写入文本,必须确保要进行解码
with open('somefile.bin', 'rb') as f:
data = f.read(16)
text = data.decode('utf-8')
with open('somefile.bin', 'wb') as f:
text = 'Hello World'
f.write(text.encode('utf-8'))
文件不存在才能写入
如果文件存在就不写入,如果存在呢,不做操作。
import os
if not os.path.exits('somefile')
with open('somefile', 'w') as f:
f.write('whllo world')
else:
print('File')
字符串的I/O操作
你想要使用操作类文件对象的程序来操作文本或二进制字符串
使用 io.StringIO() 和 io.BytesIO() 类来创建类文件对象操作字符串数据。
import io
s = io.StringIO()
s.write('hello world')
print('This is a test')
s.getvalue()
>>> s = io