首页 > 编程语言 >python 文件读写

python 文件读写

时间:2022-12-21 14:33:24浏览次数:43  
标签:fp 文件 python 读写 print path shutil os

1.1 文件夹与文件路径

d:\python\1.py

  • 路径是:d:\python
  • 文件是:1.py

1.1.1 绝对路径与相对路径

  • 绝对路径:从根目录开始的路径
  • 相对路径:从当前工作目录开始的路径

相对路径几个特殊的文件名:

  • . 一个点表示当前文件夹
  • .. 两个点表示父级文件夹

1.2 os模块与os.path模块

与文件和路径相关的一般用这两个模块。

1.2.1 获取当前工作目录

>>> import os
>>> os.getcwd()  # 获取当前工作目录
'/home/fish'

1.2.2 获取绝对路径

可以通过这个方法把文件或文件夹转换为绝对路径

>>> os.path.abspath(".")
'/home/fish'
>>> os.path.abspath("..")
'/home'
>>> os.path.abspath("hello.py")
'/home/fish/hello.py'

1.2.3 获取相对路径

os.apth.relpath(目标路径, 起点路径)

  • 返回从启点路径到目标路径的相对路径
>>> os.path.relpath("/etc", "/home/fish/app")
'../../../etc'

1.2.4 检查路径

以下方法在:os.path模块中

函数 功能
exists(path) 文件或文件夹存在返回真
isabs(path) 是绝对路径返回真
isdir(path) 是目录返回真
isfile(path) 是文件返回真
>>> os.path.exists('/etc')
True
>>> os.path.isabs('1.txt')
False
>>> os.path.isdir('/etc/fstab')
False
>>> os.path.isfile('/etc/fstab')
True

1.2.5 文件与目录的操作

以下函数在os模块

函数 功能
mkdir(path) 建立一级目录
makedirs(path) 建立多级目录
rmdir(path) 删除空目录
remove(file) 删除文件
chdir(path) 改变工作目录
import os
dir_name = "abc"

if not os.path.exists(dir_name):
    os.mkdir(dir_name)
    print("创建成功")

if os.path.exists(dir_name):
    os.rmdir(dir_name)
    print("删除成功")

if os.path.exists('log.txt'):
    os.remove("log.txt")
    print("删除文件成功")
    
print("当前的工作目录是:", os.getcwd())
os.chdir("d:\\")
print("当前的工作目录是:", os.getcwd())

1.2.6 合并路径

os.path.join(参数1,参数2 , ...)

>>> os.path.join('/','a','b','c','c/abc/def/','1.txt')
'/a/b/c/c/abc/def/1.txt'

1.2.7 获取指定文件大小

os.path.getsize(文件名)

fish@home:~$ ls -l /bin/ls
-rwxr-xr-x 1 root root 138208 Feb  8  2022 /bin/ls

查看是138208 字节

>>> os.path.getsize('/bin/ls')
138208

1.2.8 获取目录中的内容

os.listdir(path)

>>> os.listdir('/etc/default')
['apport', 'console-setup', 'cron', 'dbus', 'irqbalance', 'keyboard', 'locale', 'motd-news', 'networkd-dispatcher', 'rsync', 'ssh', 'ufw', 'useradd']

1.2.9 使用通配符获取目录中的内容

glob(path)

这个方法在glob模块

import glob

for filename in glob.glob(r"c:\windows\*.exe"):
    print(filename)

1.2.10 遍历目录树

os.walk(path)

它返回三个值:

  • 当前路径
  • 当前路径下的目录名列表
  • 当前路径下的文件名列表

之后再依次递归遍历当前路径下的目录

import os
for current_path, sub_path, filenames in os.walk(r"D:\bin\flomo"):
    print("当前路径:",current_path)
    print("当前路径下的目录:", sub_path)
    print("当前路径下的文件:", filenames)
    print("---------------")

1.3 文件操作

文件操作包括文件的读写,文件可以是二进制和文本文件。

1.3.1 打开文件

open(file, mode, ...)

参数:

  • file参数是要打开的文件
  • mode参数是打开模式
模式 说明
r 只读
w 写入模式,覆盖原内容
x 独占模式(文件必须不存在,创建文件,写入模式)
a 追加模式
b 二进制模式
t 文本模式
+ 更新模式

b,t是文件类型的模式,如果是二进制文件需要设置:rb,wb,xb,ab,如果是文本模式可以省略t(默认)

  • bufering 设置缓冲区,默认-1,系统自动设置。
  • encoding 指定文件编码,用于文本文件。
fp = open("d:\\1.txt",'r', encoding='utf-8')
print(fp.read())

1.3.2 关闭文件

文件用完需要关闭,一般放在finally中关闭:

fp = None
try:
    fp = open("d:\\21.txt", 'r', encoding='utf-8')
    print(fp.read())
except Exception as e:
    print(e)
finally:
    if fp is not None:
        fp.close()

这样写很麻烦,一般用自动资源管理,这里用到with关键字

with open("d:\\1.txt", 'r', encoding='utf-8') as fp:
    print(fp.read())

with代码结束会自动关闭文件。

1.3.3 文本文件的读写

函数 说明
read(n=-1) 读取字符串,n表示读取的字符数,-1时没有限制
readline(limit=-1) 读取一行,limit表示读取的字符数,-1表示没有限制
readlines(hint=-1) 按行读取数据到列表中
write(s) 将字符串写入文件中
writelines(lines) 向文件中写入一个列表
flush() 刷新缓冲区,数据写入文件

filename = r"d:\err.txt"
with open(filename, 'r') as fp:
    content = fp.read()

print(content)

1.3.4二进制文件的读写

filename = r"d:\1.png"
with open(filename, 'rb') as fp:  # 打开方式后面加b
    content = fp.read()
    with open("2.jpg",'wb') as to:
        to.write(content)

1.4 shutil模块

1.4.1 文件复制

shutil.copy(source, destination)

import shutil

shutil.copy("2.jpg","3.jpg")

1.4.2 复制目录树

shutil.copytree(source, destination)

import shutil

shutil.copytree(r"D:\data\CNKI",r"d:\a")

1.4.3 移动

shutil.move(source, destination)

同时也具有更名的效果。

import shutil

shutil.move(r"d:\a",r"d:\b\c")
shutil.move("2.jpg","4.jpg")

1.4.4 删除目录树

shutil.rmtree(目录)

import shutil
# 删除目录C
shutil.rmtree(r"d:\b\c")

1.5 压缩文件

1.5.1 创建压缩文件

zipfile.ZipFile("out.zip",'w', zipfile.ZIP_DEFLATED)

  • out.zip 表示输出文件
  • zipfile.ZIP_DEFLATED 表示压缩方式
import zipfile

# 创建压缩对象
fp = zipfile.ZipFile("out.zip",'w', zipfile.ZIP_DEFLATED)
# 添加文件
fp.write("3.jpg")
fp.write("4.jpg")
fp.write("1.xlsx")
fp.close()

1.5.2 查看文件信息

zipfile.ZipFile("in.zip",'r')

  • in.zip表示输入文件
import zipfile

# 读取压缩文件
info = zipfile.ZipFile("out.zip",'r')

# 查看名字信息
for filename in info.namelist():
    print(filename)

# 更多信息
for item in info.infolist():
    # 文件名,大小,压缩大小,日期
    print(item.filename, item.file_size, item.compress_size, item.date_time)
    

1.5.3 解压zip文件

import zipfile

unzip = zipfile.ZipFile("out.zip")
# 解压到abc目录
unzip.extractall('abc')
unzip.close()

标签:fp,文件,python,读写,print,path,shutil,os
From: https://www.cnblogs.com/three-sheep/p/16996207.html

相关文章