打开文件和关闭文件
open()
f=open (' 1.txt ' , ' r ')
close()
f.close()
其他方式
可以用 with open(‘1.txt’,'r') as f 的方式打开并关闭1个文件
with open ('1.txt','r') as f
访问模式
- r 读取文件,文件的指针将会放在文件的开头。这是默认模式。
- w 写入文件,如果文件不存在,则新建文件,文件存在,则覆盖此文件
- a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。
- rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
- wb 以二进制格式打开一个文件用于写入。存在则覆盖,不存在则新建
- ab 以二进制格式打开一个文件用于追加。如果该文件已存在,指针在原文末尾
- r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
- w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖,存在则覆盖
###文件读取方式 read() 一次行读取文件所有内容,返回结果为字符串
readline() 读取文件1行内容,返回结果为字符串
readlines() 逐行读取文件所有内容,返回结果为列表
大文件读取方法
如果文件过大,防止内存吃紧,应该依次读取部分内容
可以使用如下方法,读取整个大文件
#方法1:read(n)
content = f.read(50)
while len(content)>0:
content = f.read(50)
#方法2: readline()
content = f.readline()
while len(content)>0:
content = f.readline()
文件指针定位
tell():查看文件位置
seek(offset, from):跳转到某一位置
- offset:偏移量
- from:方向
- 0:表示文件开头(默认) seek(5)
- 1:表示当前位置 seek(5,1)
- 2:表示文件末尾 seek(-2,2)
文件复制
-
设置复制后文件名
对原来的文件名进行切片,rindex('.')
-
读1行,复制1行到新的文件
代码如下:
file_name = 'filtered_words.txt'
new_name = file_name[:file_name.rindex('.')] + '.bak' + file_name[file_name.rindex('.'):]
old_file = open(file_name,'r')
new_file = open(new_name,'w')
line = old_file.readline()
while len(line)>0:
new_file.write(line)
line= old_file.readline()
old_file.close()
new_file.close()
文件删除,重命名
需要导入os库
import os
os.rename('123.txt','456.txt')
os.remove('456.txt')
查看文件夹中的所有文件
os.listdir()
注意: 1. 需要导入 os模块 ( import os ) 2. 返回1个列表 如 ['1.txt','2.txt']
import os
file_names = os.listdir('./movies')
print(file_names,type(file_names))
for temp in file_names:
print(temp,type(temp))
# 输出》》
['三国 - 副本 (11).txt', '三国 - 副本.txt', '三国.txt'] <class 'list'>
# 三国 - 副本 (11).txt <class 'str'>
# 三国 - 副本.txt <class 'str'>
三国.txt <class 'str'>
创建文件夹
os.mkdir()
import os
os.mkdir('123')
# 创建123的文件夹
创建多层级文件夹
os.makedirs()
import os
os.makedirs('123/456/789')
# 创建 123/456/789 多级目录的文件夹
获取文件的路径
os.path.abspath(xxx)
import os
os.path.abspath('新建文件夹')
判断文件类型
os.path.isdir('文件夹名') 是否是文件夹
os.path.isfile('文件名') 是否是文件
os.path.isdir('新建文件夹') # True
os.path.isfile('1.txt') # True
文件操作和转义
- \u 会变转义成 Unicode 字符,注意 Windows 桌面下的文件 会被转义 如 '\C:\Users\Lee\Desktop\新建文件夹 (2)' ,\User 被转义
- 可以通过 **r'\C:\Users\Lee\Desktop\新建文件夹 (2)' ** 来防止转义
import os
# 新建文件夹 (2) 下的文件,返回1个列表
file_names = os.listdir('../新建文件夹 (2)')
for file_name in file_names:
if not os.path.isdir(file_name):
print('根目录下的文件:' + os.path.abspath(file_name))
else:
print('根目录下的文件夹:' + os.path.abspath(file_name))
file_dir = '\\' + os.path.abspath(file_name) # 防转义'\\C:\\Users\\Lee\\Desktop\\新建文件夹 (2)\\1'
file_dir = file_dir.lstrip('\\') # 去掉最左边的 \\
k = os.listdir(file_dir)
for row in k:
print('子目录下的文件:' + row)