Python文件操作
  xWYnr39PTA9E 2023年11月19日 28 0

记录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)











【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
  QtpjMRSUUfXb   2023年11月19日   30   0   0 赋值Python
xWYnr39PTA9E