Contents
18.5. 处理文件-目录和数据¶
学习大纲:
使用
os模块处理目录。复制、移动、重命名和删除文件。
使用路径。
比较数据。
合并数据。
用模式匹配文件和目录。
元数据:数据的数据。
压缩和解压。
使用
tarfile模块创建TAR文件。使用
tarfile模块查看TAR文件的内容。
目录或文件夹是指一组子目录和文件的集合。os
模块提供各种函数,允许开发者与操作系统进行交互。
18.5.1. 1.使用os模块处理目录¶
1.1 目录操作¶
os.getcwd() # 获取工作目录
os.chdir('/home/student/work') # 更改目录
os.listdir() # 列出目录
os.rename('work', 'work1') # 重命名目录
1.2 复制、移动、重命名和删除文件¶
shutil.copy('hello.py', 'welcome.py') # 复制文件
shutil.move('/home/student/sample.txt', '/home/student/Desktop/.') #移动文件
shutil.move('hello.py', 'hello_renamed.py') # 重命名文件
os.remove('sample.txt') # 删除文件
os.rmdir('work1') # 删除文件夹
1.3 使用路径¶
os.path.absname(path): 返回绝对路径,包含文件名。
os.path.dirname(path): 返回路径,不包含文件名。
os.path.basename(path): 返回文件名,不包含路径。
os.path.exists(path): 如果存在该文件或路径,则返回True 。
os.path.getsize(path): 返回文件大小,以字节为单位。
os.path.isfile(path): 检查输入是否是一个文件,若是则返回True
os.path.isdir(path): 检查输入是否是一个目录,若不是,则返回False
18.5.2. 2.比较数据¶
Pandas是一个开源的数据分析库,提供易于使用的数据结构和数据分析工具。它让数据的导入和分析变得更加容易。
pip3 install pandas --- For Python3
compare_data.py
import pandas as pd
df1 = pd.read_csv("student1.csv")
df2 = pd.read_csv("student2.csv")
s1 = set([ tuple(values) for values in df1.values.tolist()])
s2 = set([ tuple(values) for values in df2.values.tolist()])
s1.symmetric_difference(s2)
print (pd.DataFrame(list(s1.difference(s2))), '\n')
print (pd.DataFrame(list(s2.difference(s1))), '\n')
上面的示例程序比较了两个csv 文件student1.csv
和student2.csv 之间的数据。首先将数据帧(df1,df2
)转换为集合(s1,s2),然后使用了symmetric_difference()
函数检查s1 和s2 之间的差异,最后输出结果。
18.5.3. 3.合并数据¶
merge_data.py
import pandas as pd
df1 = pd.read_csv("student1.csv")
df2 = pd.read_csv("student2.csv")
result = pd.concat([df1, df2])
print(result)
18.5.4. 4.用模式匹配文件和目录¶
Python拥有glob 模块,用于查找与特定模式匹配的文件和目录名称。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @auther: 18793
import glob
file_match = glob.glob("*.py")
print(file_match)
file_match = glob.glob('[a-z]*.txt')
print(file_match)
# If recursive is true, the pattern '**' will match any files and zero or more directories and subdirectories.
file_match = glob.glob('**/*.txt', recursive=True)
print(file_match)
file_match = glob.glob('**/', recursive=True)
print(file_match)
第一个glob() 函数的pathname 为*.txt
,表示返回所有扩展名为txt 的文件名。
第二个glob() 函数的pathname 为[0-9].txt
,表示返回以数字开头的文件名。
第三个glob() 函数的pathname 为**/*.txt
,它将返回文件名和目录名。
第四个glob() 函数的pathname 为**/ ,它只返回目录名。
18.5.5. 5.元数据:数据的数据¶
PyPdf
模块,它用于从PDF文件中获取元数据。首先,什么是元数据?元数据是关于数据的数据。元数据是指描述一组数据的结构化信息,同时也是该组数据的摘要。它包含有关实际数据的基本信息,这有助于查找特定的数据。
首先我们需要安装PyPdf 模块,如下所示。
pip install pyPdf
metadata_example.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pyPdf
def main():
file_name = '/home/student/sample_pdf.pdf'
pdfFile = pyPdf.PdfFileReader(file(file_name, 'rb'))
pdf_data = pdfFile.getDocumentInfo()
print("----Metadata of the file----")
for md in pdf_data:
print(md + ":" + pdf_data[md])
if __name__ == '__main__':
main()
上面的脚本程序使用了Python 2的PyPdf
模块。首先创建了一个变量file_name
来存储PDF文件的路径。接下来使用了PdfFileReader()
读取数据。然后创建了一个变量pdf_data
来保存有关PDF的数据。最后编写了一个for 循环来获取元数据。
18.5.6. 6.压缩和解压¶
6.1 shutil压缩¶
shutil模块的make_archive() 函数,它用于压缩指定目录中的所有文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import shutil
shutil.make_archive("bbb", "zip", "bbb")
shutil.make_archive("bbb", "tar", "bbb")
shutil.make_archive() 函数的第一个参数bbb
指定被压缩文件的名称,第二个参数zip
指定压缩格式,第三个参数bbb/ 表示被压缩文件所在目录的名称。
6.2 shutil解压缩¶
要从压缩文件中解压数据,我们可以使用shutil
模块中的unpack_archive() 函数。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import shutil
shutil.unpack_archive("bbb.zip")
shutil.unpack_archive("bbb.zip",extract_dir="./bbb")
18.5.7. 7.使用tarfile模块创建TAR文件¶
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tarfile
tar_file = tarfile.open("work.tar.gz", "w:gz")
for name in ["list_dir.py", "take_backup.py"]:
tar_file.add(name)
tar_file.close()
18.5.8. 8.使用tarfile模块查看TAR文件的内容¶
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tarfile
tar_file = tarfile.open("work.tar.gz", "r:gz")
print(tar_file.getnames())
tarfile 模块查看创建的TAR文件的内容。其中,使用了getnames()
函数来读取数据。
18.5.9. 总结¶
我们学习了如何编写处理文件和目录的Python脚本程序,还学习了如何使用os
模块来处理目录。然后学习了如何复制、移动、重命名和删除文件,
并了解了Python中的Pandas模块,它可以用于比较和合并数据。最后学习了如何使用tarfile
模块创建TAR文件和查看TAR文件的内容,并且学习了如何在搜索文件和目录时进行模式匹配。