Python 文件和文件夹篇 03

3.1 文件和文件夹篇


① 复习文件的访问模式

Python 文件和文件夹篇 03
以前 还讲过 with……as 返回的东西 它可以使 返回的东西 在 with……as 语句外 不生效。即 它只在 自己 的 作用域内生效。也就相当于 自动销毁。周期比较短。所以 文件操作 我们可以 用 with……as 这样我们就不需要 关闭文件了。

pandas 也可以读 记事本文件

pandas.read_csv('文件的路径') 其文件以纯文本形式存储表格数据,我们会把它分行的读取出来,并带有 索引编号。

csv数据对象.to_csv('存储路径',index=False) index=False 就是不带 编号 写入文件,进行存储。

import pandas as pd

with open("1.txt","w",encoding='utf-8') as f:
    f.write('第一行\n第二行\n第三行')

csv = pd.read_csv('1.txt')
print(csv)
csv.to_csv('2.txt',index=False)
csv.to_csv('3.txt')

Python 文件和文件夹篇 03

③ 临时文件的概念和 临时文件模块 <建议爬虫时使用>

Python 的文件读写,是 自适应临时文件的!!!当 你在大量数据上 进行部分读写操作时,就会创建临时文件。而临时文件不会造成 缓冲区的堵塞,还可以提高 效率。

所以 我们总是会看到,当涉及到 文件读写的时候,都是 分着 多少个字节,每 多少个字节,一步一步的读写的。基本上没有 一下子 写入。。一下子读取 这种情况~ ~ 除非是新手。。

除此之外,我们也可以 手动的来创建 临时文件和临时文件夹。

TemporaryFile('访问模式') 创建一个临时的文件,并对其进行相应操作

TemporaryDirectory() 创建一个临时文件夹

from tempfile import TemporaryFile
from tempfile import TemporaryDirectory

with TemporaryDirectory() as 临时文件夹:
    print(f"临时文件夹路径:{临时文件夹}")
    with TemporaryFile('w') as 临时文件:
        print(f"临时文件路径:{临时文件.name}")
        print(f"临时文件对象:{临时文件}")

Python 文件和文件夹篇 03


3.2.1 Python 解压 ZIP 文件 [zipfile 模块]

ZipFile('zip文件路径','访问模式')

zip对象.namelist() 读取zip 压缩包里 各个文件的名字,它会返回一个列表。

import zipfile

with zipfile.ZipFile('1.zip') as zip:
    for 文件名 in zip.namelist():
        print(文件名)

Python 文件和文件夹篇 03
中文 出现乱码,是很正常的。因为 zipfile 对文件名 进行了 CP437 编码,所以我们要 先将其 进行 CP437 编码,然后 因为编码的是中文。所以 再进行 gbk 解码即可。
Python 文件和文件夹篇 03

Python 文件和文件夹篇 03

② 查看 每个文件的信息 <file_size 压缩前大小,compress_size 压缩后大小>

zip对象.getinfo(文件名) 从压缩包里 获取 相关文件的信息

import zipfile

with zipfile.ZipFile('1.zip') as zip:
    for 文件名 in zip.namelist():
        print(文件名.encode('cp437').decode('gbk'))
        信息 = zip.getinfo(文件名)
        print(信息)
        print(信息.file_size,信息.compress_size)

Python 文件和文件夹篇 03

③ 解压缩 <在读取模式下,我们可以进行 解压缩>

zip.extract(文件名,存储的路径位置) 把单个文件进行解压缩 到 指定位置

zip.extractall('存储的路径位置') 把所有的文件进行解压缩 到 指定位置

import zipfile
import os
from pathlib import Path

if not os.path.isdir('文件夹'):
    os.mkdir('文件夹')

with zipfile.ZipFile('1.zip') as zip:
    for 文件名 in zip.namelist():
        信息 = zip.getinfo(文件名)
        解压后的文件 = Path(zip.extract(文件名,'文件夹'))

        print(解压后的文件.name)
        解压后的文件.rename('文件夹\\'+文件名.encode('cp437').decode('gbk'))

解压的时候,我们也要注意,如果有 中文的话,我们就要 进行 乱码的重命名 操作了。这个 你可以用 pathlib 模块,也可以 直接 os.rename() 个人 推荐 直接用 os.rename()

单个文件和单个文件夹 进行压缩到指定压缩包。

import os
import zipfile
import os

# 压缩单个文件
zip = zipfile.ZipFile('单个文件.zip','w',zipfile.ZIP_DEFLATED)

zip.write('1.txt')

# 压缩单个文件夹

zip = zipfile.ZipFile('单个文件夹.zip','w',zipfile.ZIP_DEFLATED)

for path,dirnames,filenames in os.walk('文件夹'):
    for dirname in dirnames:
        zip.write(os.path.join(path, dirname))
    for filename in filenames:
        zip.write(os.path.join(path,filename))

Python 文件和文件夹篇 03


3.3.1 根据文件 hash 值,判断重复 即 删除

Python 文件和文件夹篇 03
比如说 我们 这里有三个 重复的 文件,并不是 单纯的 文件名重复。而是数据本身 是一样的!这样的重复 我们只能够用 hash 值 来进行判断。

头像 = open('头像.jpg',"rb").read()
头像1 = open('头像1.jpg',"rb").read()
头像2 = open('头像2.jpg',"rb").read()

print(hash(头像))
print(hash(头像1))
print(hash(头像2))

Python 文件和文件夹篇 03

依赖于 列表存储 第一个遇到的,列表里没有的 hash 值,我们就可以进行 留1 删 重 !

import os

头像 = open('图片文件/头像.jpg', "rb").read()
头像1 = open('图片文件/头像1.jpg', "rb").read()
头像2 = open('图片文件/头像2.jpg', "rb").read()

列表 = []

for path,dirnames,filenames in os.walk('图片文件'):
    for filename in filenames:
        if os.path.isfile(os.path.join(path,filename)):
            f = open(os.path.join(path,filename),'rb').read()
            hashCode = hash(f)
            try:
                列表.index(hashCode)
            except Exception as e:
                列表.append(hashCode)
            else:
                os.remove(os.path.join(path,filename))

Python 文件和文件夹篇 03

上一篇:Mac OS安装Python


下一篇:竞赛中用到的一些STL