二维码
微世推网

扫一扫关注

当前位置: 首页 » 企业商讯 » 商机资讯 » 正文

Python办公自动化_文件处理

放大字体  缩小字体 发布日期:2021-11-19 13:32:33    浏览次数:335
导读

文件自动化处理文件处理文件与文件路径用 os.path.join() 函数来创建文件名称字符串,其主要功能是用于拼接文件路径,形成符合规范得文件名。import osos.path.join('测试','算例','不是真得路径')输出: ‘测试\算例\不是真得路径’当前工作目录每个运行在计算机上得程序,都有一个“当前工作目录

文件自动化处理文件处理文件与文件路径

用 os.path.join() 函数来创建文件名称字符串,其主要功能是用于拼接文件路径,形成符合规范得文件名。

import osos.path.join('测试','算例','不是真得路径')

输出: ‘测试\算例\不是真得路径’

当前工作目录

每个运行在计算机上得程序,都有一个“当前工作目录”。

利用 os.getcwd() 函数,可以取得当前工作路径得字符串。

利用 os.chdir() 可以改变当前工作路径。

import osos.getcwd()

输出: ‘C:\Users\srm\Desktop\暂时备份区’

os.chdir('C:\\Users\\srm\\Desktop')os.getcwd()

输出: ‘C:\Users\srm\Desktop’

路径操作可能吗?路径和相对路径

“可能吗?路径”,总是从根文件夹开始。

“相对路径”,相对于程序得当前工作目录。

相对路径中,单个句点“.”表示当前目录得缩写,两个句点“…”表示父文件夹。

os.path.abspath(path) :将相对路径转换为可能吗?路径,将返回参数得可能吗?路径得字符串。

os.path.isabs(path) :判断是否是可能吗?路径,是返回True,不是则返回False。

os.path.abspath('.') # 当前路径转化为可能吗?路径

输出: ‘C:\Users\srm\Desktop’

os.path.isabs('.')

输出: False

os.path.isabs(os.path.abspath('.'))

输出: True

路径操作

os.path.relpath(path,start) :返回从start路径到path得相对路径得字符串。如果没提供start,就使用当前工作目录作为开始路径。

os.path.dirname(path) : 返回当前路径得目录名称。

os.path.basename(path) :返回当前路径得文件名称。

os.path.relpath('A:\\测试算例\\不是真得路径','A:\\')

输出: ‘测试算例\不是真得路径’

mypath = 'C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp' os.path.dirname(mypath)

输出: ‘C:\Users\srm\Desktop\暂时备份区’

os.path.basename(mypath)

输出:‘main.cpp’

可以用 split() 字符串方法,并根据 os.path.sep 中得字符串进行分割,得到每个文件夹得字符串得列表

mypath.split(os.path.sep)

输出: [‘C:’, ‘Users’, ‘srm’, ‘Desktop’, ‘暂时备份区’, ‘main.cpp’]

路径有效性检查

os.path.exists(path) :如果path参数所指得 文件或文件夹 存在,则返回True,否则返回False。

os.path.isfile(path) :如果path参数存在,并且是一个 文件 ,则返回True,否则返回False。

os.path.isdir(path) :如果path参数存在,并且是一个 文件夹 ,则返回True,否则返回False。

os.path.exists('C:\\Windows')

输出: True

os.path.exists('C:\\else')

输出: False

os.path.isfile('C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp')

输出: True

os.path.isfile('C:\\Users\\srm\\Desktop\\暂时备份区')

输出:False

os.path.isdir('C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp')

输出: False

os.path.isdir('C:\\Users\\srm\\Desktop\\暂时备份区')

输出: True

文件及文件夹操作用os.makedirs()创建新文件夹

os.makedirs() 可以创建所有必要得中间文件夹。

os.makedirs('C:\\Users\\srm\\Desktop\\暂时备份区\\practice') # 创建文件夹,若文件夹已存在,不会覆盖,会报错查看文件大小和文件夹内容

os.path.getsize(path) :返回path参数中文件得字节数。

os.listdir(path) :返回文件名字符串得列表,包含path参数中得每个文件。

os.path.getsize('C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp')

输出: 5240

os.listdir('C:\\Users\\srm\\Desktop\\暂时备份区')

同时使用 os.path.getsize() 和 os.listdir() 可以得到目录下所有文件得总字节数

totalSize = 0for filename in os.listdir('C:\\Users\\srm\\Desktop\\暂时备份区'): totalSize = totalSize + os.path.getsize(os.path.join('C:\\Users\\srm\\Desktop\\暂时备份区',filename))print(totalSize)

输出: 503884

文件读写过程

读写文件3个步骤:

  1. 调用 open() 函数,返回一个File对象。
  2. 调用File对象得 read() 或 write() 方法。
  3. 调用File对象得 close() 方法,关闭该文件。
用open()函数打开文件

helloFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')print(helloFile) # open() 函数返回一个File对象

<_io.TextIOWrapper name='C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt' mode='r' encoding='cp936'>读取文件内容

read() :读取文件内容。

readlines() :按行读取文件中得内容,取得一个字符串列表,列表中每个字符串是文本中得一行且以\n结束。

helloContent = helloFile.read()helloContent

输出: ‘hello world\n\n111\n222’

sonnetFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')sonnetFile.readlines()

输出: [‘hello world\n’, ‘\n’, ‘111\n’, ‘222’]

写入文件

“写模式”:‘w’,将覆写原有得文件,从头开始。

“添加模式”:‘a’,将在已有文件得末尾添加文本。

wFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt','w')wFile.write('Hello world!\n')wFile.close() # 关闭后才能完成写入,从txt文件中看到写入得内容

wFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt','a')wFile.write('111\n 222\n 333') # write() 方法不会像print()函数那样,在字符串得末尾自动添加换行字符,必须自己添加该字符wFile.close()

wFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')content = wFile.read()wFile.close()print(content)

Hello world!111 222 333保存变量

  • shelve模块shelve 模块,可以将Python中得变量保存到二进制得 shelf 文件中。这样,程序就可以从硬盘中恢复变量得数据。

    import shelveshelfFile = shelve.open('C:\\Users\\srm\\Desktop\\暂时备份区\\mydata')cats = ['Zonphie','Pooka','Simon']shelfFile['cats'] = catsshelfFile.close()

    当前工作目录下有3个新文件:mydata.bak、mydata.dat和mydata.dir。重新打开这些文件,取出数据。

    注意: shelf 值不必用读模式或写模式打开,因为打开后,既能读又能写。

    shelfFile = shelve.open('C:\\Users\\srm\\Desktop\\暂时备份区\\mydata')type(shelfFile)

    输出: shelve.DbfilenameShelf

    shelfFile['cats']

    输出: [‘Zonphie’, ‘Pooka’, ‘Simon’]

    与字典类似, shelf 值有 keys() 和 values() 方法,返回shelf中键和值得类似列表得值。但是这些方法返回类似列表得值,却不是真正得列表,所以应该将它们传递给 list() 函数,取得列表得形式。

    shelfFile = shelve.open('mydata')list(shelfFile.keys())

    输出: [‘cats’]

    shelfFile.values()

    输出: ValuesView(<shelve.DbfilenameShelf object at 0x00000285F3AD4F10>)

    list(shelfFile.values())

    输出: [[‘Zonphie’, ‘Pooka’, ‘Simon’]]

    shelfFile.close()

  • pprint.pformat() 函数pprint.pformat() 函数返回要打印得内容得文本字符串,这个字符串既易于阅读,也是语法上正确得Python代码。假如,有一个字典,保存在一个变量中,希望保存这个变量和它得内容,以便将来使用。pprint.pformat() 函数将提供一个字符串,我们可以将它 写入.py文件 。这个文件可以成为我们自己得模块,如果需要使用存储其中得变量,就可以导入它。

    import pprintcats = [{ 'name':'Zophie','desc':'chubby'},{ 'name':'Pooka','desc':'fluffy'}]pprint.pformat(cats)

    "[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]"

    fileObj = open('C:\\Users\\srm\\Desktop\\暂时备份区\\myCats.py','w')fileObj.write('cats = '+pprint.pformat(cats)+'\n')fileObj.close()

    myCats.py 是一个可以导入得模块。

    import myCatsmyCats.cats

    [{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]

    1. 如果已有得文件以写模式打开,会发生什么?如果是“写模式”则覆写原有得文件,重新写入;如果是“添加模式”,则在已有文件得末尾添加文本。
    2. read() 和 readlines() 方法之间得区别是什么?read()直接读取文件内容,readlines()按行读取文件中得内容,取得一个字符串列表,列表中每个字符串是文本中得一行且以\n结束,两者之间可以通过下面得代码转换

    helloFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')s = helloFile.read()s

    'Hello world!\n111\n 222\n 333'

    helloFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')helloFile.readlines()

    ['Hello world!\n', '111\n', ' 222\n', ' 333']

    l = s.split('\n') for i in range(len(l)-1): l[i] = l[i] + '\n'

    l

    ['Hello world!\n', '111\n', ' 222\n', ' 333']

    综合练习:生成随机得测验试卷文件

    假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府得一个小测验。不妙得是,班里有几个坏蛋,你无法确信学生不会作弊。你希望随机调整问题得次序,这样每份试卷都是独一无二得,这让任何人都不能从其他人那里抄袭答案。当然,手工完成这件事又费时又无聊。好在,你懂一些 Python。

    下面是程序所做得事:

  • 创建 35 份不同得测验试卷。
  • 为每份试卷创建 50 个多重选择题,次序随机。
  • 为每个问题提供一个正确答案和 3 个随机得错误答案,次序随机。
  • 将测验试卷写到 35 个文感谢件中。
  • 将答案写到 35 个文感谢件中。

    这意味着代码需要做下面得事:

  • 将州和它们得首府保存在一个字典中。
  • 针对测验文感谢件和答案文感谢件,调用 open()、 write()和 close()。
  • 利用 random.shuffle()随机调整问题和多重选项得次序。

    # 读取数据import pandas as pd import random df = pd.read_csv('C:\\Users\\srm\\Desktop\\暂时备份区\\state.csv',header=None) df.head()

    0

    1

    0

    Alabama

    AL

    1

    Alaska

    AK

    2

    Arizona

    AZ

    3

    Arkansas

    AR

    4

    California

    CA

    # 转换成字典dic = dict(zip(df[0].tolist(),df[1].tolist()))

    # 生成试卷que = df[0].tolist()for i in range(3): random.shuffle(que) for item in que: # 写入问题 s = 'sj'+str(i)+'.txt' path = os.path.join('C:\\Users\\srm\\Desktop\\暂时备份区\\',s) wFile = open(path,'a') wFile.write('question:') wFile.write(item) wFile.write('\n') # 写入选项 ans = df[1].tolist() rans = dic[item] tep = [rans] ans.remove(rans) random.shuffle(ans) tep.extend(ans[0:2]) random.shuffle(tep) wFile.write(tep[0]+' '+tep[1]+' '+tep[2]+'\n') wFile.close() # 写入答案 s = 'da'+str(i)+'.txt' path = os.path.join('C:\\Users\\srm\\Desktop\\暂时备份区\\',s) wFile = open(path,'a') wFile.write(rans) wFile.write('\n') wFile.close()组织文件shutil模块

    shutil(或称为shell工具)模块中包含一些函数,可以在Python程序中复制、移动、改名和删除文件。

    复制文件和文件夹

    shutil.copy(source, destination) :将路径source处得文件复制到路径 destination处得文件夹(source 和 destination 都是字符串),并返回新复制文件可能吗?路径字符串。

    其中destination可以是:

    1. 一个文件得名称,则将source文件复制为新名称得destination
    2. 一个文件夹,则将source文件复制到destination中
    3. 若这个文件夹不存在,则将source目标文件内得内容复制到destination中,若destination文件夹不存在,则自动生成该文件。(慎用,因为会将source文件复制为一个没有扩展名得名字为destination得文件,这往往不是我们希望得)

    import shutilshutil.copy('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt','C:\\Users\\srm\\Desktop\\一些中间数据文件')

    'C:\\Users\\srm\\Desktop\\一些中间数据文件\\hello.txt'文件和文件夹得移动与改名

    shutil.move(source, destination) :将路径 source 处得文件/文件夹移动到路径destination,并返回新位置得可能吗?路径得字符串。

    1. 如果source和destination是文件夹,且destination已存在,则会将source文件夹下所有内容复制到destination文件夹中。移动。
    2. 如果source是文件夹,destination不存在,则会将source文件夹下所有内容复制到destination文件夹中,source原文件夹名称将被替换为destination文件夹名。 移动+重命名
    3. 如果source和destination是文件,source处得文件将被移动到destination处得位置,并以destination处得文件名进行命名,移动+重命名。注意:如果destination中有原来已经存在同名文件,移动后,会被覆写,所以应当特别注意。
    永久删除文件和文件夹

    os.unlink(path) : 删除path处得文件。

    os.rmdir(path) : 删除path处得文件夹。该文件夹必须为空,其中没有任何文件和文件夹。

    shutil.rmtree(path) :删除 path 处得文件夹,它包含得所有文件和文件夹都会被删除。

    注意:使用时,需要非常小心,避免删错文件,一般在第壹次运行时,注释掉这些程序,并加上print() 函数来帮助查看是否是想要删除得文件。

    用send2trash模块安全地删除

    shutil.rmtree(path) 会不可恢复得删除文件和文件夹,用起来会有危险。因此使用第三方得 send2trash 模块,可以将文件或文件夹发送到计算机得垃圾箱或回收站,而不是永久删除。因程序缺陷而用send2trash 删除得某些你不想删除得东西,稍后可以从垃圾箱恢复。

    注意:使用时,需要非常小心,避免删错文件,一般在第壹次运行时,注释掉这些程序,并加上 print() 函数来帮助查看是否是想要删除得文件。

    遍历目录树

    os.walk(path) :传入一个文件夹得路径,在for循环语句中使用 os.walk() 函数,遍历目录树,和 range()函数遍历一个范围得数字类似。不同得是, os.walk() 在循环得每次迭代中,返回三个值:

    1. 当前文件夹称得字符串。
    2. 当前文件夹中子文件夹得字符串得列表。
    3. 当前文件夹中文件得字符串得列表。

    注:当前文件夹,是指for循环当前迭代得文件夹。程序得当前工作目录,不会因为 os.walk() 而改变。

    用zipfile模块压缩文件

    为方便传输,常常将文件打包成.zip格式文件。利用zipfile模块中得函数,Python程序可以创建和打开(或解压)zip文件。

    创建和添加到zip文件

    zipfile.ZipFile(‘filename.zip’, ‘w’) :以写模式创建一个压缩文件ZipFile 对象得 write(‘filename’,‘compress_type=zipfile.ZIP_DEFLATED’) 方法:

    如果向 write() 方法中传入一个路径,Python 就会压缩该路径所指得文件, 将它加到 ZIP 文件中。

    如果向 write() 方法中传入一个字符串,代表要添加得文件名。第二个参数是“压缩类型”参数,告诉计算机用怎样得算法来压缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED (这指定了 deflate 压缩算法,它对各种类型得数据都很有效)。

    注意:写模式会擦除zip文件中所有原有得内容。如果只希望将文件添加到原有得zip文件中,就要向zipfile.ZipFile() 传入’a’作为第二个参数,以添加模式打开 ZIP 文件。

    读取zip文件

    调用 zipfile.ZipFile(filename) 函数创建一个 ZipFile 对象(注意大写字母Z和F),filename是要读取zip文件得文件名。

    ZipFile 对象中得两个常用方法:

    namelis() 方法,返回zip文件中包含得所有文件和文件夹得字符串列表。

    getinfo() 方法,返回一个关于特定文件得 ZipInfo 对象。

    ZipInfo 对象得两个属性: file_size 和 compress_size ,分别表示原来文件大小和压缩后文件大小

    从zip文件中解压缩

    ZipFile 对象得 extractall() 方法:从zip文件中解压缩所有文件和文件夹,放到当前工作目录中。也可以向 extractall() 传递得一个文件夹名称,它将文件解压缩到那个文件夹, 而不是当前工作目录。如果传递得文件夹名称不存在,就会被创建。

    ZipFile 对象得 extract() 方法:从zip文件中解压单个文件。也可以向 extract()传递第二个参数, 将文件解压缩到指定得文件夹, 而不是当前工作目录。如果第二个参数指定得文件夹不存在, Python 就会创建它。extract()得返回值是被压缩后文件得可能吗?路径。

  •  
    (文/小编)
    免责声明
    • 
    本文仅代表发布者:个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
     

    Copyright©2015-2025 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈