全部产品
云市场

文件操作

更新时间:2019-09-18 15:39:40

目录

文件操作

该文档提供了文件读写和文件操作相关的sdk。

文件读写

文件读写相关的sdk。

open

open(path, mode)

  • path : 文件路径
  • mode : 操作模式
模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

  1. try:
  2. f = open('/path/to/file', 'r')
  3. print(f.read())
  4. finally:
  5. if f:
  6. f.close()

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

  1. f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')

read

read()
read(size)
readline()
readlines()

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

使用width等价try...finally,并且可以省略f.close()

  1. with open('/path/to/file', 'r') as f:
  2. print(f.read())

write

write(text)

  • text : 要写入的内容

写入文件。

  1. with open('/Users/michael/test.txt', 'w') as f:
  2. f.write('Hello, world!')

最佳实现

  1. def fi_File(src):
  2. if os.path.isdir(src):
  3. print(src+"这是一个文件夹") #路径是文件夹
  4. # os.rmdir(r"C:\Users\ming\Desktop\ostest\mkdir1") # 删除指定目录 只能删除空目录
  5. # os.removedirs(r"C:\Users\ming\Desktop\ostest\mkdir1") # 递归删除目录
  6. # os.unlink(r"C:\Users\ming\Desktop\ostest\mkdir1") # os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误
  7. shutil.rmtree(src) # 用rmtree命令可以直接删除文件夹,包括内部文件
  8. if os.path.isfile(src): # 路径是文件
  9. print(src+"这是一个文件")
  10. os.remove(src) # 删除指定文件
  11. else:
  12. print("文件不存在")
  13. if not os.path.exists(r"C:\Users\ming\Desktop\ostest"):
  14. os.mkdir(r"C:\Users\ming\Desktop\ostest")
  15. with open(r"C:\Users\ming\Desktop\ostest\excel.xls","w") as f:
  16. # f.write()
  17. print("创建excel.xls")
  18. f.close()
  19. os.chdir(r"C:\Users\ming\Desktop\ostest") # 改变当前工作目录到指定的路径
  20. list1 =os.listdir(r"C:\Users\ming\Desktop\ostest") #返回指定目录下所有的文件和目录名
  21. list11 =os.listdir(".") #返回当前目录下所有的文件和目录名
  22. print(list1,list11) #返回指定目录下的所有文件和目录名
  23. # if "mkdir1" in list1: # 判断文件下是否有指定文件
  24. fi_File(r"C:\Users\ming\Desktop\ostest\mkdir1")
  25. os.mkdir(r"C:\Users\ming\Desktop\ostest\mkdir1") # 创建目录
  26. ob = os.open(r"C:\Users\ming\Desktop\ostest\mkdir1\2.txt",os.O_RDWR|os.O_CREAT) # 创建文件方式1
  27. aa = "你好,我是码栈1"
  28. os.write(ob,bytes(aa,"utf-8"))
  29. with open(r"C:\Users\ming\Desktop\ostest\mkdir1\1.txt","w+") as a: # 创建文件方式2,打开文件,不存在则创建
  30. a.write("你好,我是码栈2")
  31. op = open(r"C:\Users\ming\Desktop\ostest\mkdir1\3.txt","w+") # 创建文件方式3
  32. op.write("你好,码栈3")
  33. op.close()
  34. op = open(r"C:\Users\ming\Desktop\ostest\mkdir1\3.txt","r") # 以读方式打开文件
  35. print("3.txt内容"+ op.read())
  36. print(os.path.getsize("excel.xls")) # 获取文件大小
  37. print(os.path.basename(r"C:\Users\ming\Desktop\ostest")) #返回文件名
  38. fi_File(r"C:\Users\ming\Desktop\ostest\mkdir1\复制文件.txt")
  39. shutil.copy(r".\mkdir1\1.txt", r"C:\Users\ming\Desktop\ostest\mkdir1\复制文件.txt") # 复制文件
  40. fi_File(r"C:\Users\ming\Desktop\ostest\mkdir1\复制文件2.txt")
  41. shutil.copyfile(r".\mkdir1\1.txt",r".\mkdir1\复制文件2.txt") # 复制文件
  42. fi_File(r"C:\Users\ming\Desktop\ostest\移动文件.txt")
  43. shutil.move(r"C:\Users\ming\Desktop\ostest\mkdir1\1.txt",r"C:\Users\ming\Desktop\ostest\移动文件.txt") # 移动文件位置
  44. fi_File(".\mkdir2")
  45. print("2222")
  46. shutil.copytree(r".\mkdir1",r".\mkdir2") # 复制文件夹到另外一个位置
  47. # 对时间数据进行格式化处理
  48. def timeCh(time1):
  49. str1 = time.localtime(time1)
  50. print(time.strftime("%Y-%m-%d %H:%M:%S",str1))
  51. src = r".\mkdir1\复制文件2.txt"
  52. b = os.path.getctime(src)
  53. print(b)

基本文件和目录操作

基本文件和目录操作。
需要import os

os.path.exists

os.path.exists(path)

  • path : 文件夹路径

判断文件(夹)是否存在,返回bool值。
对文件夹操作前建议先判断是否存在。

  1. os.path.exists(r'D:\test')

os.mkdir

os.mkdir(path)

  • path : 文件夹路径

创建一个文件夹。
若文件夹已经存在会报错。

  1. os.mkdir(r'D:\test')

os.rmdir

os.rmdir(path)

  • path : 文件夹路径

删除一个文件夹。
若文件夹不存在会报错。

  1. os.rmdir(r'D:\test')

os.rename

os.rename(src, dst)

  • src : 原来的名字
  • dst : 新的名字

用于重命名文件或文件夹,从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError。

  1. os.rename("test","test2")

os.listdir

os.listdir(path)

  • path : 文件夹路径

os.listdir()函数得到的是仅当前路径下的文件名,不包括子目录中的文件

  1. print(os.listdir())

os.remove

os.remove(file)

  • file : 文件路径

用于删除文件

  1. os.remove(r'D:\aaa.txt')

os.chdir

os.chdir(file)

  • file : 文件路径

用于改变当前工作目录到指定路径

  1. os.chdir(r"C:\ostest")

os.path.getsize

os.path.getsize(file)

  • file : 文件路径

获取文件大小。

  1. print(os.path.getsize(r'D:\test1.txt'))

os.path.getctime

os.path.getctime(file)

  • file : 文件或文件夹路径

获取文件或文件夹创建时间。
import time

  1. def TimeStampToTime(timestamp):
  2. timeStruct = time.localtime(timestamp)
  3. return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
  4. print(TimeStampToTime(os.path.getctime(r'D:\ass.txt')))

os.path.getmtime

os.path.getmtime(file)

  • file : 文件或文件夹路径

获取文件或文件夹修改时间。
import time

  1. def TimeStampToTime(timestamp):
  2. timeStruct = time.localtime(timestamp)
  3. return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
  4. print(TimeStampToTime(os.path.getmtime(r'D:\ass.txt')))

os.path.isdir

os.path.isdir(file)

  • file : 文件或文件夹路径

判断此路径下是否为文件夹

  1. if os.path.isdir(r'D:\dir'):
  2. print("这是一个文件夹")

os.path.isfile

os.path.isfile(file)

  • file : 文件或文件夹路径

判断此路径下是否为文件

  1. if os.path.isfile(r'D:\aaa.txt'):
  2. print("这是一个文件")

高级文件和目录操作

高级文件和目录操作。
需要import shutil

shutil.copyfile

shutil.copyfile(src,dst)

  • src : 原来的路径
  • dst : 目标路径

复制文件到另一个位置

  1. shutil.copyfile(r'D:\aaa.txt', r'D:\文档\aaa.txt')

shutil.copytree

shutil.copytree(src,dst)

  • src : 原来的路径
  • dst : 目标路径

复制文件夹到另一个位置

  1. shutil.copytree(r'D:\test1', r'D:\文档\test1')

shutil.move

shutil.move(src,dst)

  • src : 原来的路径
  • dst : 目标路径

移动文件到另一个位置

  1. shutil.move(r'D:\aaa.txt', r'D:\文档\aaa.txt')

shutil.rmtree(src)

shutil.rmtree(src)

  • src : 文件夹的路径

用于删除文件夹,包括内部文件

  1. shutil.rmtree(r"C:\ostest\mkdir1")