周大胖子 发表于 2023-9-12 23:34:30

python 文件操作基础 大概版



# # This is a sample Python script.
#
# # Press Shift+F10 to execute it or replace it with your code.
# # Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
#
#
# def print_hi(name):
#   # Use a breakpoint in the code line below to debug your script.
#   print(f'Hi, {name}')# Press Ctrl+F8 to toggle the breakpoint.
#
#
# # Press the green button in the gutter to run the script.
# if __name__ == '__main__':
#   print_hi('PyCharm_main')
#
# # See PyCharm help at https://www.jetbrains.com/help/pycharm/
#

# 参考文献
# https://zhuanlan.zhihu.com/p/56909212

# 新建一个文件 写入
with open('da.txt','w') as f:
    data = 'cbd'
    f.write(data)

# 读取只读
with open('da.txt','r') as f:
    data = f.read()
    print('context:{}'.format(data))


# 获取文件目录列表 【老版本 可以忽略】
import os
entrice = os.listdir('venv')
print(entrice)
# ['.gitignore', 'Lib', 'pyvenv.cfg', 'Scripts']

for i in entrice:
    print(i)

with os.scandir('venv') as v:
    for i in v :
      print(i)


# 新版本
# 1.使用 scandir() 不用 用下面的path
# dc = os.scandir('venv')
# print(dc) #返回的是一个迭代器
# is_file 判断是不是文件
# is_dir() 判断是不是目录
# .stat()获取文件的详细属性   提供了例如文件大小和最后修改时间的信息 st_mtime(更新时间等)
with os.scandir('venv') as dc:
    for v in dc:
      if v.is_file():
            print('这是文件'+v.name)
            print('这个文件的修改时间是{}'.format(v.stat().st_mtime) )
      elif v.is_dir():
            print('这是目录'+v.name)
      else:
            print('这是啥')
      # print('目录名称是{}'.format(v))


# 2. 使用pthlib 模块获取目录
# pathlib.Path() 返回的是 PosixPath 或 WindowsPath 对象,这取决于操作系统。
# pathlib.Path() 对象有一个 .iterdir() 的方法用于创建一个迭代器包含该目录下所有文件和目录。由 .iterdir() 生成的每个条目都包含文件或目录的信息
# 调用 pathlib.Path() 并传入了一个路径参数。然后调用 .iterdir() 来获取 my_directory 下的所有文件和目录列表。
from pathlib import Path
dm = Path('venv')
for v in dm.iterdir():
    if v.is_file():
      print('Path这是文件' + v.name)
    elif v.is_dir():
      print('Path这是目录' + v.name)
    else:
      print('Path这是啥?')





# 创建目录
# 如果目录已经存在 则抛出异常
# os.mkdir('laomo3')

# 如果目录已经存在 则抛出异常
# p = Path('laomo2')
# p.mkdir()

# 捕获文件重复的异常
p = Path('laomo2/vcm')
# try:
#   p.mkdir()
# except FileExistsError as e:
#   print(e)
    # 当文件已存在时,无法创建该文件。: 'laomo2'

# 处理异常(忽略异常)mkdir() 传入 exist_ok=True 参数来忽略 FileExistsError 异常:如果目录已存在,则不会引起错误。
p.mkdir(exist_ok=True)


# 创建一组文件夹
os.makedirs('laomo1/2012/02/02',mode=0o770, exist_ok=True)

# 创建一组文件夹 默认的模式为 0o777
m = Path('laomo2/2012/02/02')
m.mkdir(parents=True, exist_ok=True)


# 文件名模式匹配(就是文件搜索 )
# endswith() 和 startswith() 字符串方法
# fnmatch.fnmatch()
# glob.glob()
# pathlib.Path.glob()


# 遍历目录和处理文件 os.walk() 来实现这一功能


# 创建临时文件和目录
# tempfile 模块来便捷的创建临时文件和目录
# tempfile 可以在你程序运行时打开并存储临时的数据在文件或目录中。 tempfile 会在你程序停止运行后删除这些临时文件。

from tempfile importTemporaryFile

# 创建一个临时文件并为其写入一些数据
# 模式为 w + t,这使得 tempfile 在写入模式下创建临时文本文件。 没有必要为临时文件提供文件名,因为在脚本运行完毕后它将被销毁。
fp = TemporaryFile('w+t')
fp.write('Hello World!')
# 回到开始,从文件中读取数据
fp.seek(0)
data = fp.read()
print(data)
# 关闭文件,之后他将会被删除
fp.close()

# .TemporaryFile() 也是一个上下文管理器,因此它可以与with语句一起使用。 使用上下文管理器会在读取文件后自动关闭和删除文件
# with TemporaryFile('w+t') as fp:
#   fp.write('Hello universe!')
#   fp.seek(0)
#   fp.read()
# 临时文件现在已经被关闭和删除


# 删除文件和目录
# 可以使用 os,shutil 和 pathlib 模块中的方法删除单个文件,目录和整个目录树。

# 要删除单个文件(只能删文件不能删目录),请使用
# pathlib.Path.unlink(),
# os.remove() 或 os.unlink()。
# os.remove('da.txt')


# 删除目录 #如果目录不为空 则抛出错误
# os.rmdir()
# pathlib.Path.rmdir()
# shutil.rmtree()

# os.rmdir('laomo2')
# OSError: 目录不是空的。: 'laomo2'

# 删除完整的目录树
# shutil.rmtree()

importshutil
# shutil.rmtree('laomo1')


# 复制、移动和重命名文件和目录
# 最常用的函数是
# shutil.copy()复制单个文件将文件从一个位置复制到另一个位置 不保留相关信息
# shutil.copy2() 复制单个文件将文件从一个位置复制到另一个位置 保留相关信息 例如更新时间不变
# shutil.copytree(src,dest) 复制整个目录及其中包含的所有内容


# src = 'path/to/file.txt'
# dst = 'path/to/dest_dir'
# shutil.copy(src, dst)


# 移动文件和目录
# shutil.move(src,dst)   # src 是要移动的文件或目录,dst 是目标:



# 重命名文件和目录
# os.rename(src,dst)
# pathlib 模块中的 rename()


# ===归档压缩
# 读取ZIP文件
# import zipfile
#
# with zipfile.ZipFile('data.zip', 'r') as zipobj:
#   zipobj.namelist()
#这会生成一个文件列表:
# ['file1.py', 'file2.py', 'file3.py', 'sub_dir/', 'sub_dir/bar.py', 'sub_dir/foo.py']
# .namelist() 返回存档文件中文件和目录的名称列表。要检索有关存档文件中文件的信息,使用 .getinfo()
# .getinfo() 返回一个 ZipInfo 对象,该对象存储有关存档文件的单个成员的信息。 要获取有关存档文件中文件的信息,请将其路径作为参数传递



# 提取ZIP文件
# zipfile 模块允许你通过 .extract() 和 .extractall() 从ZIP文件中提取一个或多个文件
# 此处省略关于zip 文件的说明操作 用到时候百度



# 读取多个文件
# import fileinput
# for line in fileinput.input()
#   process(line)

页: [1]
查看完整版本: python 文件操作基础 大概版