Python文件读写与目录操作完整指南
本文详细讲解Python中文件的读写操作及目录管理方法。涵盖open函数的多种模式(r/w/a等)及二进制处理,介绍f.read/write/close等核心API,并深入解析os和shutil模块在文件属性获取、目录创建删除、文件复制移动中的应用。附带列表写入文件及读取TXT到列表的完整代码示例,适合Python初学者及需要处理文件系统的开发者参考。
出于安全考虑,建议在打开文件对象时为其指定一个变量名。这样在完成文件操作后,可以立即关闭该文件对象,避免无用的文件对象长期占用内存资源。例如,在读取文本文件时,应遵循这一最佳实践。
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
Python进行文件读写操作在实际开发中应用广泛。为了帮助读者深入理解其实现原理,下文将分步骤详细介绍相关程序逻辑,旨在为后续学习提供清晰指引。
f = open("d:\test.txt", "w")
具体说明如下: 第一个参数指定文件名称及路径;第二个参数为打开模式mode。 'r':只读模式(默认值。若文件不存在,则抛出错误) 'w':只写模式(若文件不存在,则自动创建新文件) 'a':追加模式,内容写入文件末尾 'r+':读写模式 若需以二进制方式打开文件,需在mode参数后追加字符"b",例如"rb"或"wb"等。 二、读取文件内容 f.read(size) 参数size指定读取的字节或字符数量,该参数可选。若省略size参数,则读取文件全部内容。 f.readline() 仅读取文件中的一行内容。 f.readlines() 将文件所有行读取至数组中,格式为[line1,line2,...lineN]。为避免将全部内容加载至内存从而提升效率,此方法常被推荐使用。
f.write(string) 将字符串写入文件。若需换行,必须在字符串末尾添加"\n",随后调用f.close()关闭文件。
四、文件指针定位 执行f.read()后,文件指针位于文件末尾。若再次调用f.read(),将返回空内容。若需重新读取全部内容,必须将指针重置至文件开头: f.seek(0) 该函数语法如下(单位为bytes): f.seek(offset, from_what) from_what指定起始读取位置,offset表示从该位置移动的偏移量。例如f.seek(10, 3)表示定位到第三个字符后再向后移动10个字符。from_what值为0时表示从文件开头开始,此参数可省略,默认值为0。以下给出
f = open('/tmp/workfile', 'r+')
f.write('0123456789abcdef')
f.seek(5) # Go to the 6th byte in the file
f.read(1)
'5'
f.seek (-3, 2) # Go to the 3rd byte before the end
f.read(1)
'd'
五、关闭文件以释放资源 文件操作完成后,务必调用f.close()关闭文件,以便释放系统资源供其他程序使用。 Python文件读写技术在计算机语言中应用广泛,理解其具体实现有助于提升编程效率。下文将详细介绍相关应用程序逻辑。
一、Python中操作文件和文件夹时,常使用的os模块和shutil模块及其常用方法。
1. 获取当前工作目录,即当前Python脚本运行的目录路径:os.getcwd() 2. 返回指定目录下的所有文件和目录名:os.listdir() 3. 用于删除单个文件:os.remove() 4. 删除多个空目录:os.removedirs(r"c:\python") 5. 检验指定路径是否为文件:os.path.isfile() 6. 检验指定路径是否为目录:os.path.isdir() 7. 判断路径是否为绝对路径:os.path.isabs() 8. 检验指定路径是否存在:os.path.exists() 9. 返回路径中的目录名和文件名:os.path.split() 示例: 代码如下: os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'file.txt')
10. 分离文件扩展名:os.path.splitext() 11. 获取路径名:os.path.dirname() 12. 获取文件名:os.path.basename() 13. 执行shell命令:os.system() 14. 读取和设置环境变量:os.getenv() 与os.putenv() 15. 获取当前平台使用的行终止符:os.linesep。Windows使用'\r\n',Linux使用'\n',而Mac使用'\r' 16. 指示当前使用的平台:os.name。对于Windows,返回'nt';对于Linux/Unix用户,返回'posix' 17. 重命名文件或目录:os.rename(old, new) 18. 创建多级目录:os.makedirs(r"c:\python\test") 19. 创建单个目录:os.mkdir("test") 20. 获取文件属性:os.stat(file) 21. 修改文件权限与时间戳:os.chmod(file) 22. 终止当前进程:os.exit() 23. 获取文件大小:os.path.getsize(filename) 二、文件操作方法汇总 1. os.mknod("file.txt") 创建空文件 2. fp = open("file.txt", 'w') 直接打开文件,若文件不存在则创建 3. 关于open模式详解:
r: 以读方式打开文件,用于读取文件信息。
w: 以写方式打开文件,用于向文件写入信息。若文件已存在,则清空该文件后再写入新内容。
a: 以追加模式打开文件(打开时文件指针自动移至文件末尾)。若文件不存在则创建新文件。
b: 以二进制模式打开文件,而非文本模式。该模式主要对Windows或Dos有效,类Unix系统文件通常以二进制模式操作。
r+: 以读写模式打开。
w+: 以读写模式打开(参见 w 模式说明)。
a+: 以读写模式打开(参见 a 模式说明)。
rb: 以二进制读模式打开。
wb: 以二进制写模式打开(参见 w 模式说明)。
ab: 以二进制追加模式打开(参见 a 模式说明)。
rb+: 以二进制读写模式打开(参见 r+ 模式说明)。
wb+: 以二进制读写模式打开(参见 w+ 模式说明)。
ab+: 以二进制读写模式打开(参见 a+ 模式说明)。
文件对象常用方法 f.close(): 关闭文件。使用open()打开文件后必须记得关闭,否则可能占用系统可打开的文件句柄数。 f.fileno(): 获取文件描述符,返回一个数字。 f.flush(): 刷新输出缓冲区。 f.isatty(): 若文件为交互终端则返回True,否则返回False。 f.read([count]): 读取文件内容。若指定count,则读取指定字节数。 f.readline(): 读取一行信息。 f.readlines(): 读取所有行,即获取整个文件内容。 f.seek(offset[,where]): 将文件指针移动至相对于where的offset位置。where为0表示文件开头(默认值);1表示当前位置;2表示文件结尾。 f.tell(): 获取当前文件指针位置。 f.truncate([size]): 截取文件,使文件大小变为size。 f.write(string): 将字符串写入文件。 f.writelines(list): 将列表中的字符串连续写入文件,不包含换行符。
fp.read([size]) # size为读取长度,单位为byte fp.readline([size]) # 读取一行。若定义size,可能仅返回该行的一部分内容 fp.readlines([size]) # 将文件每一行作为列表的一个元素并返回该list。其内部通过循环调用readline()实现。若提供size参数,表示读取内容的总长度,可能仅读取文件部分内容。 fp.write(str) # 将字符串写入文件,write()不会在str后自动添加换行符 fp.writelines(seq) # 将seq内容全部写入文件(多行一次性写入)。该函数忠实写入,不会在每行后添加任何内容。 fp.close() # 关闭文件。Python会在文件不再使用时自动关闭,但此行为不保证,建议养成手动关闭的习惯。若在关闭后对文件进行操作,将产生ValueError。 fp.flush() # 将缓冲区内容写入硬盘 fp.fileno() # 返回长整型的"文件标签" fp.isatty() # 判断文件是否为终端设备文件(Unix系统中) fp.tell() # 返回文件操作标记的当前位置,以文件开头为原点 fp.next() # 返回下一行,并将文件操作标记移至下一行。使用for … in file遍历文件时,即调用next()函数实现。 fp.seek(offset[,whence]) # 将文件操作标记移至offset位置。offset通常相对于文件开头计算,一般为正数。若提供whence参数,则计算方式不同:whence为0表示从头开始计算,1表示以当前位置为原点计算,2表示以文件末尾为原点计算。需注意,若文件以a或a+模式打开,每次执行写操作时,文件操作标记会自动返回至文件末尾。 fp.truncate([size]) # 将文件裁剪至规定大小,默认为当前文件操作标记位置。若size大于文件大小,依系统不同可能不改变文件、补0至指定大小或添加随机内容。
三、目录操作完整方法列表
1. 创建目录
os.mkdir("file") 2. 复制文件: shutil.copyfile("oldfile","newfile") # oldfile和newfile均只能是文件 shutil.copy("oldfile","newfile") # oldfile只能是文件夹,newfile可以是文件或目标目录 3. 复制文件夹: 4. shutil.copytree("olddir","newdir") # olddir和newdir均只能是目录,且newdir必须不存在 5. 重命名文件(或目录) os.rename("oldname","newname") # 文件或目录均使用此命令 6. 移动文件(或目录) shutil.move("oldpos","newpos") 7. 删除文件 os.remove("file") 8. 删除目录 os.rmdir("dir") # 仅能删除空目录 shutil.rmtree("dir") # 可删除空目录或有内容的目录 9. 切换目录 os.chdir("path") # 更改当前路径
目录操作汇总: os.mkdir("file") 创建目录 复制文件: shutil.copyfile("oldfile","newfile") oldfile和newfile均只能是文件 shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件或目标目录 复制文件夹: shutil.copytree("olddir","newdir") olddir和newdir均只能是目录,且newdir必须不存在 重命名文件(或目录) os.rename("oldname","newname") 文件或目录均使用此命令 移动文件(或目录) shutil.move("oldpos","newpos") 删除文件 os.remove("file") 删除目录 os.rmdir("dir") 仅能删除空目录 shutil.rmtree("dir") 可删除空目录或有内容的目录 切换目录 os.chdir("path") 更改当前路径
编程实例展示:
# -*- coding: utf-8 -*-
import os
import shutil
# 一. 路径操作:判断、获取和删除
#1. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
#print: currentpath: f:\LearnPython
currentpath = os.getcwd()
print "currentpath: ",currentpath
#2. 返回指定目录下的所有文件和目录名:os.listdir()
#print:os.listdir(): ['test.txt', 'testRW.py', 'test1.txt', 'cmd.py', 'rwfile.py', 'downloadfile.py', 'date.py', 'time.py', 'datetime.py', 'file.py']
print "os.listdir(): ",os.listdir('f:\LearnPython')
path = "F:\mmmmmmmmm\debug_taobao_200003@taobao_android1.6_3.2.1.apk"
#3. 判断给出的路径是否真地存:os.path.exists()
if os.path.exists(path):
#删除一个文件:os.remove()
os.remove(path)
else:
print path,"not exist"
#4. 删除多个目录:os.removedirs(“c:\python”)
#它只能删除空目录,如果目录里面有内容将不会被删除
if os.path.exists("d:/woqu"):
os.removedirs("d:/woqu")
else:
os.mkdir("d:/woqu")
os.removedirs("d:/woqu")
#5. 判断给出的路径是否是一个文件:os.path.isfile()
#print: True
print os.path.isfile("D:\hello\json.txt")
#6. 判断给出的路径是否是一个目录:os.path.isdir()
#print: True
print os.path.isdir("D:\hello")
#7. 判断是否是绝对路径:os.path.isabs()
#print: True
print os.path.isabs("D:\hello")
# 判断是否是链接
print os.path.islink('http://www.baidu.com')
#8. 返回一个路径的目录名和文件名:os.path.split()
#eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt')
#print: ('D:\\hello', 'json.txt')
print os.path.split("D:\hello\json.txt")
#9. 分离扩展名:os.path.splitext()
#print:('D:\\hello\\json', '.txt')
print os.path.splitext("D:\hello\json.txt")
#10. 获取路径名:os.path.dirname()
#print: 'D:\\hello'
print os.path.dirname("D:\hello\json.txt")
#11. 获取文件名:os.path.basename()
#print: 'json.txt'
print os.path.basename("D:\hello\json.txt")
#13. 指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
print "os.name: ",os.name
#14. linex 下的命令
if os.name == 'posix':
#读取和设置环境变量:os.getenv() 与os.putenv()
home_path = os.environ['HOME']
home_path = os.getenv('HOME') #读取环境变量
elif os.name == 'nt':
home_path = 'd:'
print 'home_path: ',home_path
#15. 给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
print(os.linesep)
#16. 应为windows和linux的路径有点点不一样,windows是用 \\ 来分割的,linux是用 / 来分隔,
#而用os.sep 会自动根据系统选择用哪个分隔符。
print(os.sep)
#17. 重命名:os.rename(old, new)
#先进入目录
os.chdir("d:\\hello")
print os.getcwd()
#18. 再重命名
os.rename("1.txt", "11.txt")
#19. 创建多级目录:os.makedirs(“c:\python\test”)
os.makedirs('d:\h\e\l\l\o')
#20. 创建单个目录:os.mkdir(“test”)
os.mkdir('d:\f')
#21. 获取文件属性:os.stat(file)
#print: nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=497L, st_atime=1346688000L, st_mtime=1346748054L, st_ctime=1346748052L)
print os.stat('d:\hello\json.txt')
#22. 修改文件权限与时间戳:os.chmod(path,mode)
#这里有介绍:http://blog.csdn.net/wirelessqa/article/details/7974477
#23. 终止当前进程:os.exit()
#24. 获取文件大小:os.path.getsize(filename)
print os.path.getsize('d:/hello/json.txt')
Python中将列表写入文件的方法: 实例代码:
a = [1,2,3,4,5,6,7,8,9]
tmp = []
for i in range(0,len(a),3):
tmp.append(str(a[i])+","+str(a[i+1])+","+str(a[i+2])+"\n")
file("./a.txt",'w').writelines(tmp)
Python读取TXT文件至列表的方法: 实例代码: 假设TXT文件内容为:aaa,bbb,ccc ddd,eee,fff
目标是将读取内容保存至列表,显示结果为[[aaa,bbb,ccc],[ddd,eee,fff]]
txtpath=r"a.txt"
fp=open(txtpath)
arr=[]
for lines in fp.readlines():
lines=lines.replace("\n","").split(",")
arr.append(lines)
fp.close()
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









