IO编程
文件读写
读文件
f = open("/home/username/test.txt", "r") # 在内存中打开文件
f.read() # 一次性读取文件的全部内容
f.close # 关闭文件
- 符号“r”表示读,默认读utf-8编码的文本文件,如果要读图片、视频等二进制文件,则用”rb”代替。
- 如果文件不存在,会报IOError的错误。一旦出错,f.close()就不会被调用。最好的方式是用with语句来帮我们自动关闭文件。
with open("/home/username/test.txt", "r") as f: print(f.read())
- 对于大文件,不能一次性读取所有内容,可以反复调用read(size)方法,每次最多读取size字节的内容。或者调用readline()方法,每次读取一行内容;也可以调用readlines()方法,一次读取所有内容并按行返回一个list。
for line in f.readlines(): print(line.strip()) # strip()方法可以去掉首尾的空格。
-
像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。
- 对于特定编码的文本文件,需要给open()函数传入encoding参数。
写文件
with open("/home/username/test.txt", "w[b]") as f:
f.write("Hello World!")
- 只有文件关闭之后,对文件所作的更改才能保存到磁盘上。
操作文件和目录
常用的
- os.path.join(“/home/username/test”, “test.txt”)
- 拼接字符串,结果为/home/usrname/test/test.txt
- 根据系统来确定拼接符是“/”(Linux)还是“\”(Windows).
- 操作的是字符串,不需要真实的路径。
- os.path.split(“/home/username/test.txt”)
- 可拆分出文件名(或目录名)
- 返回父目录和文件名或目录名,总共两个字符串。
- 上面返回(“/home/username”, “test.txt”)
- 字符串的split(arg)方法,是根据传入的原字符串中的字符拆分原字符串,返回多个字符串。
- os.path.splitext(“filename.txt”)
- 可拆分出后缀名
- 返回(“filenam”,”.txt”)
- os.path.exists(“/home/username/test.txt”)
- 判断路径是否存在
- os.path.abspath(“.”)
- 查看当前目录的绝对路径
- os.mkdir(“/home/usrname/newdir”)
- 新建目录
- os.makedirs(“/test01/test02/test03”)
- 递归创建目录
- os.rmdir(“/home/usrname/abandoneddir”)
- 删除目录
- os.rename(“/home/username/oldname”, “/home/usrname/newname”)
- 重命名,要求第一个参数表示的路径真实存在,第二个表示的路径不存在。
- 可以把原文件复制到新的地方,并可重命名。
- os.remove(“/home/usrname/abandonedfile”)
- 删除文件
操作excel
xlrd 读.xls或者.xlsx文件
import xlrd
import xlwt
import os
from xlutils.copy import copy
def readexcel():
book = xlrd.open_workbook("/home/zj/桌面/test02allsimilarities.xls")
# table = data.sheets()[0]
sheet = book.sheet_by_index(0) # 获取索引值为0的表单。
# sheet = data.sheet_by_name("sheetname") # 根据表单名获取表单。
i = 1 # 索引都是从0开始的
print(sheet.row_values(i)) # 返回包含第i+1行的值的list
c = sheet.col_values(i) # 返回包含第i+1列的值的list
nrows = sheet.nrows # 返回表单现有数据的行数
ncols = sheet.ncols # 返回表单现有数据的列数
# print(ncols)
cell_C4 = sheet.cell(3, 2).value # 获取单元格C4的值,其索引为(4-3,2), C表示列的索引值。
# print(cell_C4)
cell_B3 = sheet.row(2)[1].value # 根据行列来索引
# print(cell_B3)
# print(nrows)
# cell_C4 = table.cell_value(3, 2) # 获取单元格C4的值
print(cell_C4)
def write_new_excel():
workbook = xlwt.Workbook() # 新建工作簿
wsheet = workbook.add_sheet("sheetname") # 添加工作表
wsheet.write(1, 1, "单元格的值") # 表单中写入新的值,这里可以设置相关的格式
workbook.save("filename_path") # 保存
def write_to_old_or_new_excel(filename_path):
# 判断该工作不是否存在,不存在就新建一个工作簿,并添加新的表单。
if not os.path.exists(filename_path):
w = xlwt.Workbook()
ws = w.add_sheet("sheetname")
w.save(filename_path)
rexcel = xlrd.open_workbook(filename_path) # 打开工作簿
wexcel = copy(rexcel) # 复制工作簿,从打开的xlrd的Book变量中,拷贝到xlwt的Workbook变量中。
wsheet = wexcel.get_sheet(0) # 从Workbook变量中获得对应索引的表单,
xlwt.write(2, 2, "value") # 写数据
rexcel.save(filename_path) # 保存
操作json
常用操作
- json.dumps(py_obj) — python对象编码成json格式
- json.dumps(py_obj, indent=4) 格式化输出
- json.loads(json_obj) — json格式解码成python对象
- json.dump(py_obj, f_opened) — python对象写进json文件中
- json.dump(py_obj, f_opened, indent=4) 格式化输出
- json.load(f_opened) — 从json文件中解码出python对象