Python文件操作

2024-06-19  本文已影响0人  逆风飞翔的鸟

本文介绍如何使用Python实现对文件、目录以及压缩包的操作。

一、文件操作

1、创建文件

with open("example.txt", "w") as file:
    # 在这里进行文件操作
    pass

2、删除文件

如果文件不存在,将会抛出文件不存在的异常。注意只能删文件,如果给了一个文件夹路径则会报错。

import os

try:
    os.remove('example.txt')
    print('文件删除成功')
except Exception as e:
    print('文件删除失败', e)

3、拷贝文件

import shutil
    
shutil.copy('example.txt','./new_folder')
shutil.copy('example.txt','./new_folder/new_file.txt')

两种实现方案:

4、移动文件

import shutil
    
shutil.copy('example.txt','./new_folder/')
shutil.move('example.txt','new_folder/new_file.txt')

两种方式使用:

5、重命名文件

import os
    
os.rename('old_file.txt','new_file.txt')

6、查询文件

(1)字符串内置方法

.startswith(),.endswith()

(2)glob模块

import glob
    
print(glob.glob('*.py'))
    
print(glob.glob('**/*.txt',recursive=True))
模式 意义
匹配所有
? 匹配任何单个字符
[seq] 匹配seq中的任何字符
[!seq] 匹配任何不在seq中的字符

**表示任意层文件或文件夹 recursive=True会不断进入文件夹内

7、打印文件信息

import os
    
for file in os.scandir('./'):
    print(file.stat())

os.scandir()返回的文件都可以查询信息

8、读文件

(1)read()方法

read()方法用于读取整个文件的内容,并将其存储为一个字符串。


file = open('example.txt', 'r')

content = file.read()

print(content)

(2)readlines()方法

readlines()方法用于读取整个文件的内容,并将其存储为一个列表,列表中的每个元素表示文件中的一行。

file = open('example.txt', 'r')

lines = file.readlines()

for line in lines:
    print(line)

(3) readline()方法

readline()方法用于读取文件的一行内容,并将其存储为一个字符串。

file = open('example.txt', 'r')

line = file.readline()

print(line)

4、写文件

文件读写模式:

打开模式 文件类型 方式 对已有文件影响 如果文件不存在 备注
r 文本 只读 抛异常 write等方法不可用
rb 二进制 只读 抛异常 write等方法不可用
r+ 文本 读写 追加 抛异常
rb+ 二进制 读写 追加 抛异常
w 文本 只写 覆盖并新建 新建 read等方法不可用
wb 二进制 只写 覆盖并新建 新建 read等方法不可用
w+ 文本 读写 覆盖并新建 新建 因为覆盖原来文件,read等方法获取到原文件的内容
wb+ 二进制 读写 覆盖并新建 新建 因为覆盖原来文件,read等方法获取到原文件的内容
a 文本 追加 追加到最后 新建 read等方法不可用
ab 二进制 追加 追加到最后 新建 read等方法不可用
a+ 文本 读写 追加到最后 新建
ab+ 二进制 读写 追加到最后 新建

(1)写入字符串数据

# 写入字符串数据
with open("example.txt", "w") as file:
    file.write("Hello, World!\n")
    file.write("This is a new line.")

(3)写入字节数据

# 写入字节数据
with open("example.txt", "wb") as file:
    content = "Hello, World!\n"
    file.write(content.encode("utf-8"))

(4)writelines()

写入list内容,不会在元素之间自动添加换行符。

 
with open('example.txt','w',encoding='utf-8') as f:
    lines = [
    '春夜喜雨\n',
    '杜甫 [唐代]\n',
    '好雨知时节,当春乃发生。\n',
    '随风潜入夜,润物细无声。\n',
    '野径云俱黑,江船火独明。\n',
    '晓看红湿处,花重锦官城。\n']
    f.writelines(lines)

二、目录操作

1、遍历文件夹

(1)列出当前文件夹下所有的文件和文件夹

import os

os.listdir()
os.listdir('指定目录')
    
for file in os.scandir():
    print(file.name, file.is_dir())

判断文件还是文件夹:

import os

os.path.isdir('example')
os.path.isfile('example')

(2)遍历目录下所有的文件

import os
for dirpath, dirnames, files in os.walk('./'):
    print(f'发现文件夹:{dirpath}')
    print(files)

dirpath 是文件夹路径; dirnames是dirpath这个文件夹下的子文件夹列表; files是dirpath这个文件夹里的文件列表。

2、创建文件夹

(1)创建单层文件夹

import os

os.mkdir('新文件夹')

放文件夹已经存在时运行这句代码会报错,FileExisitsError

import os

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

只有当文件夹不存在的时候创建文件夹。

(2)创建多层文件夹

import os

os.makedirs('第一层文件夹/第二层文件夹/第三层文件夹')

当最里层文件夹已经存在时(第三层)运行这句代码会报错。

3、删除文件夹

import shutil
    
shutil.rmtree('文件夹')

4、复制文件夹

import shutil
    
shutil.copytree('文件夹1','文件夹2')

会将文件夹内的所有文件和文件夹都复制过去,新的文件夹不能已经存在。

5、移动文件夹

shutil.move(要移动的文件/文件夹,要移动的位置)

import shutil
    
shutil.move('folder_1','new_folder/')
shutil.move('folder_2','new_folder')

两种方式使用:

6、重命名文件夹

import os
    
os.rename('old_folder','new_folder')

7、查找文件夹

字符串内置方法:.startswith(),.endswith()

8、路径拼接(解决跨平台问题)

Windows中采用反斜杠()作为作为文件夹之间的分隔符; Mac和Linux中采用正斜杠(/)作为文件夹之间的分割符。

为了解决跨平台的不一致,使用os模块下的系统函数进行拼接:

import os

os.path.join('MyApp', 'service')

Windows:MyApp\\service, Mac和LinuxMyApp/service

三、压缩文件

1、读取压缩文件

import zipfile
    
with zipfile.ZipFile('压缩包.zip','r') as zipobj:
    print(zipobj.namelist())

乱码情况处理:

for file_name in zipodj.namelist():
    print(file_name.encode('cp437').decode('gbk'))

2、获取压缩包文件信息

import zipfile
    
with zipfile.ZipFile('压缩包.zip','r') as zipobj:
    for file_name in zipobj.namelist():
        info = zipobj.getinfo(file_name)
        print(info.file_size,info.compress_size)

file_size是原始文件的大小,compress_size是压缩后大小,输出单位为字节。

3、解压压缩包

zipobj.extract(压缩包要解压的文件名,解压到的位置)

import zipfile

with zipfile.ZipFile('压缩包.zip','r') as zipobj:
    zipobj.extract('压缩包内压缩的文件名','解压到的指定目录')

中文名字解压后会出现乱码 乱码解决:

for file_name in zipobj.namelist():
    correct_path = file_name.encode('cp437').decode('gbk')

建议路径中文件和文件夹不要出现中文。 如果有中文可以现货区正确的编码文字,再重命名。

4、提取压缩包文件

默认当前路径:

import zipfile

with zipfile.Zipfile('压缩包.zip','r') as zipobj:
    zipobj.extractall()

带密码的压缩文件解压:

import zipfile

with zipfile.Zipfile('压缩包.zip','r') as zipobj:
    zipobj.extractall(path='指定解压目录',pwd=b'设置的密码')

5、创建压缩包

import zipfile
    
file_list = ['1.txt','2.txt','3.txt']
    
with zipfile.ZipFile('压缩成的压缩包名称.zip','w') as zipobj:
    for file in file_list:
        zipobj.write(file)

mode='a' 表示追加。

上一篇 下一篇

猜你喜欢

热点阅读