大家做在数据处理的时候, 肯定难免会与文件交互, 那么对于指定的文件类型, 我们如何操作呢?
1.python 读写 CSV 文件
- import CSV
- #python2 可以用 file 替代 open
- with open('test.csv','w') as csvFile:
- writer = CSV.writer(csvFile)
- #先写 columns_name
- writer.writerow(["index","a_name","b_name"])
- #写入多行用 writerows
- writer.writerows([[1,2,3],[0,1,2],[4,5,6]])
- # 用 reder 读取 CSV 文件
- with open('test.csv','r') as csvFile:
- reader = CSV.reader(csvFile)
- for line in reader:
- print line
一定要注意, CSV 文件在写入时, 字段和字段之间是用逗号 "","" 分割的, 如果稍微不注意, 就会出现串行的情况.
2.python 读写 Excel 文件
- import xlwt
- # 创建工作簿
- f = xlwt.Workbook()
- '''
- 创建第一个 sheet:
- sheet1
- '''
- #创建 sheet
- sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)
- row0 = [u'编号',u'单位',u'网站备案号',u'域名',u'外链名称',u'不良网站名',u'不良 url 地址',u'地市',u'ip 地址',u'截图',u'备注',u'审核时间',u'父链接',u'源码超链接']
- #生成第一行
- for i in range(0,len(row0)):
- sheet1.write(0,i,row0[i]) # 顺序为 x 行 x 列写入第 x 个元素
- f.save('newfile.xls')
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # 读取 Excel 数据
- import xlrd
- data = xlrd.open_workbook('test.xls') # 打开 xls 文件
- table = data.sheets()[0] # 打开第一张表
- nrows = table.nrows # 获取表的行数
- for i in range(nrows): # 循环逐行打印
- if i == 0: # 跳过第一行
- continue
- print table.row_values(i)
3.python 读写 txt 文件
- # 第一种
- with open("test.txt","r","utf-8") as f:
- # 为 a + 模式时, 因为为追加模式, 指针已经移到文尾, 读出来的是一个空字符串.
- ftext = f.read() # 一次性读全部成一个字符串
- ftextlist = f.readlines() # 也是一次性读全部, 但每一行作为一个子句存入一个列表
- # 第二种
- f = open('test.txt', 'r', 'utf-8')
- ftext = f.read() # 一次性读取完成
- ftextlist = f.readlines() # 同上
- fline = f.readline() # 只读取 1 行
- f.close() # 关闭文件
- # 写入 txt
- f = open('test.txt', 'ab', 'utf-8') # 在文件存在内容的时候追加
- f = open('test.txt', 'wb', 'utf-8') # 文件存在时直接覆盖, 没有就创建文件写入
- f.write('aa') # 文件写入内容
- f.close()
- # 第二种
- with open('test.txt', 'a') as f: # 道理同上
- f.write('aa')
- with open('test.txt', 'w') as f: # 道理同上
- f.write('aa')
image.PNG
接下来说说 with open 和 open 的区别:
区别:
用 open 去打开一个文件进行读取, 假设文件不存在的话, 比如打开文件 aaaa
image.PNG
如果文件不存在, open() 函数就会抛出一个 IOError 的错误, 并且给出错误码和详细的信息告诉你文件不存在!
如果文件打开成功, 接下来, 调用 read() 方法可以一次读取文件的全部内容, Python 把内容读到内存, 用一个 str 对象表示
- >>> f.read()
- 'Hello, world!'
最后一步是调用 close() 方法关闭文件. 文件使用完毕后必须关闭, 因为文件对象会占用操作系统的资源, 并且操作系统同一时间能打开的文件数量也是有限的:
f.close()
由于文件读写时都有可能产生 IOError, 一旦出错, 后面的 f.close() 就不会调用. 所以, 为了保证无论是否出错都能正确地关闭文件, 我们可以使用 try ... finally 来实现:
- try:
- f = open('/path/to/file', 'r')
- print(f.read())
- finally:
- if f:
- f.close()
但是每次都这么写实在太繁琐, 所以, Python 引入了 with 语句来自动帮我们调用 close() 方法:
- with open('/path/to/file', 'r') as f:
- print(f.read())
这和前面的 try ... finally 是一样的, 但是代码更佳简洁, 并且不必调用 f.close() 方法.
总结: 以后读写文件都使用 with open 语句, 不要再像以前那样用 f = open() 这种语句了!
来源: http://www.jianshu.com/p/339347ea516d