python文件自动化处理 -- 读写文件
Posted 胜天半月子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python文件自动化处理 -- 读写文件相关的知识,希望对你有一定的参考价值。
文章目录
一、os.makedirs()
- os.makedirs()
程序可以用os.makedirs()函数创建新文件夹(目录)
1.1 文件读过程
在python中,读写文件有3个步骤:
- 调用open0函数,返回一个File对象。
- 调用File对象的read0或write0方法。
- 调用File对象的close0方法,关闭该文件。⭐
file = open(file='./test.txt',encoding = 'UTF-8')
print(file)
<_io.TextIOWrapper name=’./test.txt’ mode=‘r’ encoding=‘UTF-8’>
-
test.txt
-
read()读文件
content = file.read()
print(content)
file.close()
白日依山尽
黄河入海流
欲穷千里目
更上一层楼
- readlines()读文件
file = open(file='./test.txt',encoding = 'UTF-8')
contentList = file.readlines()
print(contentList)
file.close()
[‘白日依山尽\\n’, ‘黄河入海流\\n’, ‘欲穷千里目\\n’, ‘更上一层楼’]
1.2 文件写过程
- 覆盖写:w
- 追加写:a
案例-生成随机的测验试卷⭐⭐
- 构思
- 创建35份不同的测验试卷。
- 为每份试卷创建50个多重选择题,次序随机。
- 为每个问题提供一个正确答案和3个随机的错误答案,次序随机。
- 将测验试卷写到35个文本文件中。
- 将答案写到35个文本文件中。
- 代码编写
- 将州和它们的首府(即省会)保存在一个字典中。 (类似于 省份:省会)
- 针对测验文本文件和答案文本文件,调用open(),write()和close().
- 利用
random.shuffle()
随机调整问题和多重选项的次序。
import random
import os
# 将州与首府保存到同一个字典里
capitals = 'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado':
'Denver','Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida':
'Tallahassee','Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho':
'Boise', 'Illinois': 'Springfield', 'Indiana': 'Indianapolis', 'Iowa':
'Des Moines', 'Kansas': 'Topeka', 'Kentucky': 'Frankfort', 'Louisiana':
'Baton Rouge', 'Maine': 'Augusta', 'Maryland': 'Annapolis', 'Massachusetts':
'Boston', 'Michigan': 'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi':
'Jackson', 'Missouri': 'Jefferson City', 'Montana': 'Helena', 'Nebraska':
'Lincoln', 'Nevada': 'Carson City', 'New Hampshire': 'Concord',
'New Jersey': 'Trenton', 'New Mexico':'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh',
'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':
'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':
'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia', 'West Virginia':
'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'
os.mkdir('./testDir')
for quizNum in range(35):
# 创建试卷和答案文件
quizFile = open('./testDir/capticalsquiz%s.txt' % (quizNum + 1), 'w')
answerKeyFile = open('./testDir/capticalsquiz_answers%s.txt' % (quizNum + 1), 'w')
# 写试卷的标题和开头
quizFile.write('Name:\\n\\nDate:\\n\\nClass:\\n\\n')
quizFile.write(' ' * 20 + 'State Capticals Quiz (From %s)' % (quizNum + 1))
quizFile.write('\\n\\n')
# 打乱capital字典中州的顺序
states = list(capitals.keys()) # 列表存入50个州(省)的名字
random.shuffle(states) # 打乱states(省)的顺序
# 循环states,制造50个问题
for questionNum in range(50):
# 生成正确答案
correctAnswer = capitals[states[questionNum]] # 通过列表找到州即键 通过键找到值
wrongAnswers = list(capitals.values()) # 省会构成列表
del wrongAnswers[wrongAnswers.index(correctAnswer)] # 删除列表中的正确的省会城市
# random.sample()函数:
# 第一个参数是你希望选择的列表
# 第二个参数是你希望选择的值的个数。
# 生成4个答案选项
wrongAnswers = random.sample(wrongAnswers, 3) # 随机生成3个错误答案
answerOption = wrongAnswers + [correctAnswer]
random.shuffle(answerOption)
# 在试卷文件中写入问题
quizFile.write('%s. What is the capital of %s?\\n' % (questionNum + 1,
states[questionNum]))
for i in range(4):
quizFile.write(' %s. %s\\n' % ('ABCD'[i], answerOption[i]))
quizFile.write('\\n')
# 在答案文件中写入答案
answerKeyFile.write('%s. %s\\n' % (questionNum + 1, 'ABCD'[
answerOption.index(correctAnswer)]))
quizFile.close()
answerKeyFile.close()
案例讲解
- random.shuffle()函数
import random
alist = [1,2,3,4,5]
random.shuffle(alist)
print(alist)
[2, 1, 3, 5, 4]
- del关键字
- del 用于删除对象。在 Python,一切都是对象,因此 del 关键字可用于删除变量、列表或列表片段等。
- 原有的列表变了
x = ["apple", "banana", "cherry"]
del x[0]
print(x) # 在原有的列表更改
[‘banana’, ‘cherry’]
- random.sample()函数
sample(list, num)返回一个长度为num的新列表,新列表存放list所产生num个随机唯一的元素
capitals = 'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado':
'Denver','Connecticut': 'Hartford'
import random
states = list(capitals.keys()) # 提取字典capitals中的键生成列表states
print('州:',states)
new_states = random.sample(states,5) #在列表states中随机挑选5个生成新的列表new_states
print('random.sample():',new_states)
州: [‘Alabama’, ‘Alaska’, ‘Arizona’, ‘Arkansas’, ‘California’, ‘Colorado’, ‘Connecticut’]
random.sample(): [‘Colorado’, ‘Alabama’, ‘Arizona’, ‘Arkansas’, ‘Connecticut’]
二、os.walk()
遍历目录树:os.walk()函数被传入一个字符串值,即一个文件夹的路径
返回值3个:
- 当前文件夹名称的字符串
- 当前文件夹中子文件夹的字符串的列表
- 当前文件夹中文件的字符串的列表
import os
for foldername,subfolders,filenames in os.walk("F:/python/python_automation"):
print('当前文件夹是:',foldername)
print('当前文件夹的子文件夹是:',subfolders)
print('当前文件夹的子文件是:',filenames)
# 注意看函数的返回值(黑体加粗)
当前文件夹是: F:/python/python_automation
当前文件夹的子文件夹是: [’.ipynb_checkpoints’, ‘boob’, ‘newDir’, ‘testDir’]
当前文件夹的子文件是: [‘meitu.jpg’, ‘python面向对象编程_类的使用.ipynb’, ‘test.txt’, ‘文件自动化处理-读写文件.ipynb’]
当前文件夹是: F:/python/python_automation.ipynb_checkpoints
当前文件夹的子文件夹是: []
当前文件夹的子文件是: [‘python面向对象编程_类的使用-checkpoint.ipynb’, ‘文件自动化处理-读写文件-checkpoint.ipynb’]
当前文件夹是: F:/python/python_automation\\boob
当前文件夹的子文件夹是: [‘joy’]
当前文件夹的子文件是: [‘meitu.jpg’, ‘Q_A.zip’]
…
…
import os
for foldername,subfolders,filenames in os.walk("F:/python/python_automation"):
print('当前文件夹是:',foldername)
for subfolder in subfolders:
print('当前文件夹的子文件夹是:',subfolder)
for file in filenames:
print('当前文件夹的子文件是:',file)
print('——'*16)
当前文件夹是: F:/python/python_automation
当前文件夹的子文件夹是: .ipynb_checkpoints
当前文件夹的子文件夹是: boob
当前文件夹的子文件夹是: newDir
当前文件夹的子文件是: meitu.jpg
当前文件夹的子文件是: python面向对象编程_类的使用.ipynb
当前文件夹的子文件是: test.txt
当前文件夹的子文件是: 文件自动化处理-读写文件.ipynb
————————————————————————————————
当前文件夹是: F:/python/python_automation.ipynb_checkpoints
当前文件夹的子文件是: python面向对象编程_类的使用-checkpoint.ipynb
当前文件夹的子文件是: 文件自动化处理-读写文件-checkpoint.ipynb
————————————————————————————————
当前文件夹是: F:/python/python_automation\\boob
当前文件夹的子文件夹是: joy
当前文件夹的子文件是: meitu.jpg
当前文件夹的子文件是: Q_A.zip
————————————————————————————————
当前文件夹是: F:/python/python_automation\\boob\\joy
当前文件夹的子文件夹是: tom
当前文件夹的子文件是: meitu.jpg
————————————————————————————————
当前文件夹是: F:/python/python_automation\\boob\\joy\\tom
当前文件夹的子文件是: meitu.jpg
————————————————————————————————
当前文件夹是: F:/python/python_automation\\newDir
当前文件夹的子文件是: meitu.jpg
————————————————————————————————
案例-快速定位文件位置
findFileName = input('enter the file name you want find:')
targetDir = input('enter a range:')
for foldername,subfolders,filenames in os.walk(targetDir):
for subfolder in subfolders:
if subfolder == findFileName:
print('subfolder:',foldername+'/'+subfolder)
for filename in filenames:
if filename == findFileName:
print('filename:',foldername+'/'+filename)
print('——'*10)
enter the file name you want find:meitu.jpg
enter a range:F:\\python\\python_automation
filename: F:\\python\\python_automation/meitu.jpg
————————————————————
————————————————————
filename: F:\\python\\python_automation\\boob/meitu.jpg
————————————————————
filename: F:\\python\\python_automation\\boob\\joy/meitu.jpg
————————————————————
filename: F:\\python\\python_automation\\boob\\joy\\tom/meitu.jpg
————————————————————
filename: F:\\python\\python_automation\\newDir/meitu.jpg
————————————————————
————————————————————
三、zipfile模块解压缩文件
- example.zip
3.1 读取ZIP文件
要读取ZIP文件的内容,首先必须创建一个ZipFile对象(请注意大写首字母Z和F),ZipFile对象在概念上与File对象相似
请注意,zipfile是Python模块的名称,
ZipFile()
是函数的名称
- ZipFile对象的创建
- 要创建一个ZipFile对象,就调用zipfie.zipFileo函数,向它传入一个字符串,表示.zip文件的文件名
- namelist()方法
- 返回ZIP文件中包含的所有文件和文件夹的字符串的列表
- getinfo()方法
- namelist()返回的这些字符串可以传递给ZipFile对象的getinfo()方法,返回一个关于特定文件的ZipInfo对象
3.2 解压缩ZIP文件
- 步骤
- 创建一个ZipFile对象
- 调用加压缩的相关函数
- 最后使用close()方法关闭ZipFile对象【
ZipFile.close()
】
- extractall()方法
- ZipFile对象的extractall()方法从ZIP文件中解压缩所有文件和文件夹,放到当前工作目录中。【最后记得关闭文件】
- 你可以向extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作目录
- extract()方法
- ZipFile对象的extract()方法从ZIP文件中解压缩单个文件。
- 传递给extract()的字符串,必须匹配namelist()返回的字符串列表中的一个。或者,你可以向extract()传递第二个参数,将文件解压缩到指定的文件夹,而不是当前工作目录。如果第二个参数指定的文件夹不存在,Python就会创建它。
3.3 压缩ZIP文件
要创建你自己的压缩ZIP文件,必须以“写模式"打开ZipFile对象,即传入w,作为第二个参数(这类似于向open0函数传入w,以写模式打开一个文本文件)。
如果向ZipFile对象的write()方法传入一个路径,Python就会压缩该路径所指的文件,将它加到ZIP文件中。
import zipfile
newZip = zipfile.ZipFile('./Boob/new.zip','w')
newZip.write('./boob') # 将该文件夹压缩到new.zip文件中
newZip.close()
- 压缩与解压缩
import os
import zipfile
newZip = zipfile.ZipFile('./boob/Q_A.zip','w') # w或者a 尝试看看是哪个
for folderName,subfolders,filenames in os.walk('F:/python/python_automation/testDir/'):
for filename in filenames:
filepath = os.path.join(folderName,filename) # 路径拼接作用
print('filepath:',filepath)
newZip.write(filepath)
newZip.close()
以上是关于python文件自动化处理 -- 读写文件的主要内容,如果未能解决你的问题,请参考以下文章
Python 中 openpyxl 模块封装,读写 Excel 文件中自动化测试用例数据