记录2023.11.7学习
文件操作
文件
计算机处理信息,需要长久保存,使用文件来进行处理。
按照内部数据的组织形式,分为:文本文件和二进制文件两类。
文件分类
文本文件
若干行以编码存储的字符组成。通常每行以换行符结尾。
二进制文件
除了文本文件之外的文件都称为二进制文件。以字节串形式存储,打开二进制文件要用相关软件来进行解码后才能读取。
文件常用操作
文件打开open()
变量名 = open(r'文件名','打开模式')
f = open(r'filename.txt','r')
文件打开模式
值 |
描述 |
r |
只读模式(文件指针指向文件头,不存在抛出异常 ) |
w |
写模式,文件指针指向文件头,若文件已存在,则覆盖写入,若不存在,则创建 |
a |
追加模式,文件指针指向文件尾,在文件尾部写入数据,不覆盖文件原有内容 |
+ |
读/写模式,与r/w/a/x一同使用,在原有功能基础上增加同时读/写功能 |
b |
二进制模式,可与其他模式组合使用(rb,wb,ab) |
文件关闭
注意:使用open打开文件的话为了安全起见使用完文件后要关闭文件
文件变量名.close()
文件的读/写
读取 |
|
read() |
一次读取完文件所有内容,返回字符串 |
read(szie) |
从文件中读取size个字节(python2)或字符(python3) |
readline() |
读取一行内容,返回 |
readlines() |
将文件每一行作为字符串作为元素存入列表中,返回列表 |
seek(offset) |
将文件指针移到指定位置,offset值:0文件开头,1当前位置,2文件结尾 |
写入 |
|
write(test) |
将test写入文件,test为字符串 |
wirtelinues(test) |
将元素全为字符串的列表写入文件,不添加换行符 |
f = open('filename.txt','w')
f.write('hellofile')
f.close()
f = open('filename.txt','r')
file5 = f.read(5) # hello
filenext = f.read() # file
f.close()
with
无论如何都确保文件被正常关闭的语句with
with open('文件名.txt','r') as file:
for i in file.readlines():
# 原来可以直接在for循环的时候就使用readlines方法,
# 不用单独赋值一个变量
print(i)
openpyxl库操作
openpyxl是一个读/写excel2010的库,主要处理xlsx的文档,能同时读取和修改excel文档。
创建excel文件
导入Workbook类,创建对象
from openpyxl import Workbook
wb = Workbook()
# 返回第一张表
ws = wb.worksheets[0]
属性 |
描述 |
active |
获取当前获取的worksheet |
worksheets |
以列表的形式返回所有的worksheet(表格) |
read_only |
判断是否已read_only模式打开excel文档 |
sheetnames |
获取工作簿中的表(列表)的名称 |
添加数据
row = [数据,字符串]
ws.append(row)
保存文件
wb.save(r"路径名+文件名+后缀名")
读取excel文件
导入load_workbook类
from openpyxl import load_workbook
wb = load_workbook(r"路径+文件名+后缀名")
ws = wb.worksheet[0]
获取单元格内容
a1 = ws['A1'].value
单元格赋值
# 直接赋值
ws['A1'] = 10
# 使用cell()函数赋值
ws.cell(row=2,column=1,value=20)
# 第二行,第一列,值为20
获取行和列
# 获取有效的数据行数和列数
ws.max_row
ws.max_column
遍历所有单元格
# 双重循环遍历打印所有单元格的值
for r in range(ws.max_row):
for c in range(ws.max_column):
print(ws.cell(row=r+1,column=c+1).value)
os库操作
os库提供文件与文件夹操作方法
listdir()方法
用于返回指定的文件夹包含的文件或文件夹的名字的列表,列表元素为字符串
# 列出指定路径下的所有文件和文件夹
import os
path = r"路径"
filelist = os.listdir(path)
for file in filelist:
print(file)
# 列出当前路径下的所有文件和文件夹
import os
filelist = os.listdir(".")
for file in filelist:
print(file)
项目实战
# 单个文件格式转换 - 转换
from openpyxl import Workbook,load_workbook
import os
def main(textfilename):
newfilename = textfilename[:-3] + 'xlsx'
wb = Workbook()
ws = wb.worksheets[0]
with open(textfilename) as fp:
for line in fp:
line = line.strip().split(',')
ws.append(line)
wb.save(newfilename)
# 批量文件转换 - 批量转换
from openpyxl import Workbook,load_workbook
import os
def main(textfilename):
newfilename = textfilename[:-3] + 'xlsx'
wb = Workbook()
ws = wb.worksheets[0]
with open(textfilename) as fp:
for line in fp:
line = line.strip().split(',')
ws.append(line)
wb.save(newfilename)
# 查找当前目录下的所有txt文件,批量转换
file_list = os.listdir('.')
for filename in file_list:
pos = filename.rindex('.')
if file_list[pos+1:] == 'txt':
main(filename)
# 单个文件内容修改
from openpyxl import Workbook,load_workbook
import os
def moodeexcel(xlsxfilename):
wb = load_workbook(xlsxfilename)
ws = wb.worksheet[0]
for r in range(ws.max_row):
for c in range(ws.max_column):
if ws.cell(row=r+1,column=c+1).value == 'xxx':
ws.cell(row=r+1,column=c+1).value = 'xxx'
wb.save(xlsxfilename)
# 批量文件内容修改 -
from openpyxl import Workbook,load_workbook
import os
def moodeexcel(xlsxfilename):
wb = load_workbook(xlsxfilename)
ws = wb.worksheet[0]
for r in range(ws.max_row):
for c in range(ws.max_column):
if ws.cell(row=r+1,column=c+1).value == 'xxx':
ws.cell(row=r+1,column=c+1).value = 'xxx'
wb.save(xlsxfilename)
file_list = os.listdir('.')
for filename in file_list:
pos = filename.rindex('.')
if filename[pos+1:] == 'xlsx':
moodeexcel(filename)