# 3. 文件
# 1. 文件处理 os/pathlib
遍历文件名
import os # 获取文件列表 sources_path = "./folder" # 路径 file_name = os.listdir(sources_path) # 所有文件名
1
2
3
4
5遍历多层文件夹
import os file_list = [] for root, folder, files in os.walk('./folder'): for file_name in files: file_list.append(root + '/' + file_name)
1
2
3
4
5
6检测并创建文件夹
import os # 创建文件夹/文件目录 path = 'abc/' # 检测文件夹/文件是否存在,不存在就创建该文件夹 if not os.path.exists(path): print('folder not exist') os.makedirs(path) else: print('folder exist')
1
2
3
4
5
6
7
8
9
10重命名
import os # 重命名文件 os.rename(old_name, new_name)
1
2
3用默认应用打开文件、文件夹
import os os.startfile('file_path') # 打开文件 path = '' os.system("explorer.exe %s" % path) # 打开文件夹
1
2
3
4
# 2. 文件读写
# 2.1. 通用文件处理 Open
读取文件文件
# 文件名,模式(默认 r), 缓存 file = open('./test.txt', 'r') for line in file: # 按行读取 print(line, end='') # end=''避免输出两次换行 # 关闭文件 file.close()
1
2
3
4
5
6# 会自动关闭文件(推荐) with open('./test.txt', 'r') as file: # 按行读取,也可以用 for line in file.readlines(): for line in file: print(line, end='') # end=''避免输出两次换行
1
2
3
4
5写文件
# w 写入,a 追加,文件不存在会自动创建 with open('./test.txt', 'w') as file: file.write('123\n')
1
2
3# 手动打开/关闭文件 log = open('./logs.txt', 'w') # 打开 log.write('abc\n') # 写入 log.close() # 关闭
1
2
3
4参数
open 参数 内容 file (必须)文件名 mode 打开模式 buffering 设置缓冲 encoding 编码 errors 报错级别 newline 区分换行符 closefd 传入的 file 参数类型 opener 设置自定义开启器 mode 参数 内容 w 以写方式打开 a 以追加模式打开 (从 EOF 开始,必要时创建新文件) r+ 以读写模式打开 w+ 以读写模式打开 (参见 w ) a+ 以读写模式打开 (参见 a ) rb 以二进制读模式打开 wb 以二进制写模式打开 (参见 w ) ab 以二进制追加模式打开 (参见 a ) rb+ 以二进制读写模式打开 (参见 r+ ) wb+ 以二进制读写模式打开 (参见 w+ ) ab+ 以二进制读写模式打开 (参见 a+ ) 用 numpy 处理 csv 数据的方法
- 读取数据
file = open("filename.csv", "rb") # 读取 csv 文件,以逗号为间隔,跳过第一行 data = np.loadtxt(file, delimiter=",", skiprows=1) a = data[行起始:终止,列起始:终止]
1
2
3
4用 pandas 读写 csv 文件,参考 pandas 笔记
# 2.2. Excel(xls/xlsx) 文件
使用
xlrd/xlwt
(v2.0 以上不支持 xlsx, 请使用 openpyxl)安装库文件
pip install xlrd pip install xlwt
1
2读取文件
import xlrd # 打开文件 data = xlrd.open_workbook('filename.xlsx') # 获取第一个工作表 table = data.sheets()[0] # 行列数 rows = table.nrows cols = table.ncols # 行列值 table.row_values(i) table.row_values(i)[0] table.col_values(i) table.col_values(i)[0] # 单元格 table.cell(x,y).value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16日期处理
import xlrd from xlrd import xldate_as_datetime from xlrd import xldate_as_tuple xldate_as_datetime(table.row_values(i)[0], 0) # 2019-06-01 00:00:00 *xldate_as_tuple(table.row_values(i + 1)[0], 0) # 2019 6 1 0 0 0
1
2
3
4
5
6
使用
openpyxl
安装库文件
pip install openpyxl # pandas read_excel 函数也会调用 openpyxl
1
2读取文件
import openpyxl # 打开文件 wb = openpyxl.load_workbook("file_name.xlsx") # 以只读方式打开 wb = openpyxl.load_workbook("file_name.xlsx", read_only=True) # 读取 sheet 页 sheet = wb['sheetname'] # or sheet = wb.worksheets[0] # 行列数 sheet.max_column sheet.max_row # 行列值 sheet.cell(x, y).value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16