首页 > 编程笔记 > Python笔记 阅读:12

Python文件操作汇总(新手必看)

文件的绝对路径由目录和文件名两部分构成,示例代码如下:
import os.path

path = '/home/data/file.wav'

print(os.path.abspath(path)) # 返回绝对路径(包含文件名的全路径)
print(os.path.basename(path)) # 返回路径中包含的文件名
print(os.path.dirname(path)) # 返回路径中包含的目录
输出如下:

/home/data/file.wav
file.wav
/home/data

Python读写文件

逐行读入文本文件,代码如下:
lexicon = open("lexicon.txt")
for line in lexicon:
    line = line.strip()
    print(line, "\n")
lexicon.close()

读入 utf-8 编码格式的文本文件,代码如下:
import codecs
import sys

transcript = codecs.open(sys.argv[1], "r", "utf8")  # 第一个参数传入文件名
for line in transcript:
    print(line)
transcript.close()

为了实现写入文本文件,可以使用 'w' 模式的 open() 函数以写模式打开新文件,代码如下:
new_path = "a.speaker_info"
fout = open(new_path, 'w')
需要注意,如果 new_path.txt 在打开文件之前已经存在,则它的旧内容将被破坏,所以在使用 'w' 模式时要小心。

一旦打开新文件,可以使用写入操作 <file>.write() 将数据放入文件中。写入操作接收单个参数,该参数必须是字符串,并将该字符串写入文件。如果想要在文件中开始新行,则必须明确提供换行符,示例代码如下:
fout.write("\nID:\t1212")

关闭文件可确保磁盘上的文件和文件变量之间的连接已完成。关闭文件还可确保其他程序能够访问它们并保证用户的数据安全。所以,一定要关闭文件。使用 <file>.close() 函数关闭所有文件,代码如下:
fout.close()

使用 open() 函数创建文件对象可以使用的模式总结如下:
对于 json 格式的文件,可以导入 json 模块读取文件,代码如下:
import json
data = json.load(open('my_file.json', 'r'))

演示 json 文件的内容如下:

{"hello":"lietu"}


演示读取 json 格式的文件如下:

>>> import json
>>> print(json.load(open('my_file.json','r')))
{u'hello': u'lietu'}

Python重命名文件

Linux 操作系统中的文件名区分英文大小写,而 Window 操作系统中的文件名不区分英文大小写。

可以使用 os.rename() 方法重命名文件。首先使用 touch 命令创建一个空文件,代码如下:
# touch ./test1
然后把 test1 重命名为 test2:
import os

src = 'test1'
dst = 'test2'
os.rename(src, dst)

Python遍历文件

使用 os.scandir() 遍历一个目录。os.scandir() 方法返回一个迭代器,示例代码如下:
import os

with os.scandir('/home/') as entries:
    for entry in entries:
        print(entry.name)
这里通过 with 语句使用上下文管理器关闭迭代器,并在迭代器耗尽后自动释放已获取的资源。

只打印出一个目录下的文件,代码如下:
dir_entries = os.scandir('/home/')
for entry in dir_entries:
    if entry.is_file():  # 判断项目是否文件
        print(f'{entry.name}')

如果想要遍历一个目录树并处理树中的文件,则可以使用 os.walk() 方法。os.walk() 默认以自上而下的方式遍历目录,代码如下:
import os

for root, dirs, files in os.walk("/home/"):
    for name in files:
        print(os.path.join(root, name))  # 打印文件
    for name in dirs:
        print(os.path.join(root, name))  # 打印目录

相关文章