在读取文件之前,你需要先打开它。在Python里打开一个文件很简单:
f = open("file", encoding="utf-8")
-
从文件中读取数据有三种方式:
read()
,readline()
,readlines()
。
假设 file 的内容为:
hello
welcome
see you!
1.read([size])
方法 ,read([size])
方法从文件当前位置起读取size
个字节,若无参数size
,则表示读取至文件结束为止,它范围为字符串对象。
2.readline()
方法,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。
3.readlines()
方法,readlines()
方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。
>>>f = open("file", "r", encoding="utf-8")
>>>f.read()
'hello\nwelcome\nsee you!\n'
>>>f = open("file", "r", encoding="utf-8") #文件读完需再次打开才能再次读取内容
>>>f.readline()
'hello\n'
>>>f.readlines()
['welcome\n', 'see you!\n'] #将剩下的读出并存进一个列表中
f.close() #关闭文件
4.当我们需要从文件中取出特定行的时候还可以用linecache
模块
>>>import linecache
>>>linecache.getline('file', 2)
'welcome\n'
常用with
方式打开文件,这种打开方式在对文件读写完毕后会自动关闭文件,避免忘记关闭文件造成的内存损失。
>>>with open("file", "r", encoding="utf-8") as f:
for line in f: #配合for循环一行一行读出内容
print(line)
hello
welcome
see you!
seek()
方法可一直接定位到文章特定位置开始读取内容,tell()
方法返回当前位置。
>>>f = open('file','r',encoding='utf-8')
>>>f.seek(5)
5
>>>f.read(6)
'\nwelco'
>>>f.tell()
11
-
写入文件有两种模式:
“写”模式会重写文件。传递`mode='w'`参数给open()函数。 “追加”模式会在文件末尾添加数据。传递`mode='a'`参数给open()函 数。
如果文件不存在,两种模式下都会自动创建新文件,所以就不需要“如果文件还不存在,创建一个新的空白文件以能够打开它”这种琐碎的过程了。所以,只需要打开一个文件,然后开始写入即可。
>>>with open('file', mode='a', encoding='utf-8') as f:
f.write("hello world!")
>>>f = open('file')
>>>f.read()
'hello\nwelcome\nsee you!\nhello world!
>>>f.close()
-
标准库中有自带的 csv (逗号分隔值) 模块处理 csv 格式的文件
1.CSV文件的写入
>>>import csv
>>> a=[("name","sex","age"),("john",'boy',25),('tina','girl',23),("sara","girl",23)]
>>> f=open("csvf", mode="w",encoding="utf-8",newline="")
>>>wf=csv.writer(f)
>>>wf.writerows(a)
>>>f.close()
在打开格式中加入参数newline=""
以便使得写入时行与行之间不空行
2.CSV文件的读取
>>>import csv
>>>f = open('csvf', encoding='utf-8')
>>>rf = csv.reader('f')
>>>list(rf)
[['name', 'sex', 'age'],
['john', 'boy', '25'],
['tina', 'girl', '23'],
['sara', 'girl', '23']]
>>>for row in rf: #可用for循环依次读出各行
print(row)
['name', 'sex', 'age']
['john', 'boy', '25']
['tina', 'girl', '23']
['sara', 'girl', '23']
>>>f.close()