文章目录
- 一、文件的IO读写操作
- 1.常用的文件读取标志符
- 2.普通文件的读操作
- 二、csv文件的读写操作
- 1.读取操作
- 2.读取时候跳过某一行
- 3.列表方式写入csv文件
- 4.字典方式写入csv文件
- 三、excel的数据操作(非pandas模块)
- 1.读取excel的某个sheet的某一行的某一列
- 2.追加数据到新文件
一、文件的IO读写操作
1.常用的文件读取标志符
标识 | 含义 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
b | 可以在上述标识后边加b,表示字节层面,例如‘wb’,可以借助requests模块下载请求图片到本地 |
举个例子:
假设现在有个1.txt的文件
我们简单的读取一下
通常操作文件,我们会使用这种方式,可以不用关闭文件,是Python的一种简洁方式
2.普通文件的读操作
关于读文件有3种方式,这里说一下区别
方法 | 作用 |
---|---|
read | 1.读取整个文件,将文件内容放到一个字符串变量中。2.如果文件非常大,尤其是大于内存时,无法使用read()方法。3.read()直接读取字节到字符串中,包括了换行符 |
readline | 1.readline()方法每次读取一行;返回的是一个字符串对象,保持当前行的内存 2.比readlines慢得多 3.readline() 读取整行,包括行结束符,并作为字符串返回 |
readlines | 一次性读取整个文件;自动将文件内容分析成一个行的列表。 |
二、csv文件的读写操作
1.读取操作
有一个示例文件,内容如下
读取文件
import csv # 使用csv模块file_path = 'result.csv'# 读取csv文件
with open(file_path, 'r') as f:reader = csv.reader(f, delimiter=',') # 默认的情况下, 读和写使用逗号做分隔符(delimiter)for row in reader:print(row)
结果
2.读取时候跳过某一行
import csv
from itertools import islicewith open('2.csv', 'r') as f:reader = csv.reader(f)for row in islice(reader, 1, None): # 跳过表头的第一行print(row)
3.列表方式写入csv文件
这个是通过列表的方式进行写入,如果有标题,需要自己一一对应
import csvwith open('some.csv', 'w') as f:writer = csv.writer(f)writer.writerow(['1', '1', '1', '1'])writer.writerow(['2', '2', '2', '2' ])
问题: 发现每写完一行会加入一个空行
解决办法: Python3因此需要加入在open( )中增加一个参数newline=’’
import csvwith open('some.csv', 'w',newline='') as f:writer = csv.writer(f)writer.writerow(['1', '1', '1', '1'])writer.writerow(['2', '2', '2', '2' ])
Python2可以把w或者a改成字节存储,可以避免这个问题,这里我封装了一下python2的写入
def write_to_csv(file_path, row, fileheaders):with open(file_path, 'ab+') as f:f.write(codecs.BOM_UTF8)writer = csv.writer(f)if not os.path.getsize(file_path):writer.writerow(fileheaders)writer.writerow(row)print(row)
4.字典方式写入csv文件
import csvdata = [{'name': '张三', 'age': 15, 'sex': '男'},{'name': '李四', 'age': 12, 'sex': '男'},{'name': '彪子', 'age': 1, 'sex': '女'},
]keys = data[0].keys() # 这里每行key相同,我随便取一行做表头with open('result.csv', 'w', newline='', encoding='utf-8') as f:writer = csv.DictWriter(f, fieldnames=keys)writer.writeheader()# writer.writerows(data) # 按顺序写全部writer.writerow(data[0]) # 只写一条
三、excel的数据操作(非pandas模块)
原文件
1.读取excel的某个sheet的某一行的某一列
import xlrdfile = 'demo.xlsx'
sheet_name='Sheet1'work = xlrd.open_workbook(file)
work_sheet = work.sheet_by_name(sheet_name)print(work_sheet.cell_value(2, 0)) # 读取第3行的第1列
2.追加数据到新文件
# coding: utf-8 import xlrd
from xlutils.copy import copyfile = 'demo.xlsx'
sheet_name = 'Sheet1'work = xlrd.open_workbook(file)
work_sheet = work.sheet_by_name(sheet_name)# 对数据表格进行复制
new_file = copy(work)
ws = new_file.get_sheet(0)# 往新表格写数据
ws.write(4, 0, '4')
ws.write(4, 1, 'Danny')# 保存
new_file_name = 'new_demo.xlsx'
new_file.save(new_file_name)