虽然研究了很多python代码,却没有整理过关于文件操作的,系统地整理下。
一、普通的文件读写
在磁盘上读写文件都是由操作系统控制的,应用读写文件就是请求操作系统打开一个文件对象,然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
python内置了各种函数,来对文件进行操作。
1、打开文件:open
f = open('data/test.txt', 'r')
2、读取文件内容:read()
str=f.read()#返回一个str对象
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
因为调用read()会一次性读取文件的全部内容,如果文件特别大,会内存溢出,所以,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。根据不同情况决定调用哪种方法。
3、读取二进制文件
f = open('img/test.jpg', 'rb')
f.read()
4、字符编码
要读取非ASCII编码的文本文件,就必须以二进制模式打开,再解码。比如GBK编码的文件:
f = open('/Users/michael/gbk.txt', 'rb')
u = f.read().decode('gbk')
如果每次都这么手动转换编码嫌麻烦(写程序怕麻烦是好事,不怕麻烦就会写出又长又难懂又没法维护的代码),Python还提供了一个codecs模块帮我们在读文件时自动转换编码,直接读出unicode:
import codecs
with codecs.open('data/gbk.txt', 'r', 'gbk') as f:
f.read()
5、关闭文件
f.close()
Python引入了with语句来自动帮我们调用close()方法,这样我们就不用手工调用close方法了:
with open('data/test.txt', 'r') as f:
print f.read()
6、写文件
with open('data/test.txt', 'w') as f:
f.write('Hello, world!')
注意,当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。所以如果不用with语句的话千万不要忘记调用close()。
二、Python读取CSV文件的三种方式
1、普通方法读取:
with open("fileName.csv",encoding='utf-8') as file:
for line in file:
print line
2、用CSV标准库读取:
import csv
csv_reader = csv.reader(open("fileName.csv"))
for row in csv_reader:
print row
3、用pandas读取:
import pandas as pd
data = pd.read_csv("fileName.csv")
print data
4、DataFrame写入csv文件
df.to_csv('Result.csv')