1.open函数
2.常用的文件操作
3.用fileinput()操作文件
4.利用os模块进行目录操作
4.1获取当前路径
4.2获取目录内容
4.3创建和删除目录
4.4判断是否目录,文件
4.5遍历某目录下的所有目录和文件
1.open函数
当使用python的内置函数 open() 打开一个文件后,就会返回一个 文件对象,open()常用的格式如下:
f = open(filename,mode)
filename:表示文件名或者文件路径
mode:表示打开文件的模式,是可选参数,下面列表介绍mode有哪些可以选择
模式字符 | 表示的操作 |
r | 只读(默认) |
w | 可写,但会先清除原来文件内容 |
a | 追加数据 |
b | 二进制数据模式 |
x | 新建一个文件,可写 |
+ | 打开文件直接更新 |
t | 文本模式(默认) |
实例:
def file_open(name = ‘python.txt’):
f = open(name)
2.常用文件操作
如有:
f = open(filename)
文件操作 | 功能描述 |
f.read([n]) | 将整个文件读入字符串中,或指定读取n个字符 |
f.readline([n]) | 读取文件的一行到字符串中,或者指定读取一行的n个字符 |
f.readlines() | 将整个文件按行读入到列表中 |
f.write(s) | 向文件中写入字符串s |
file.writelines(lines) | 向文件写入一个行数据列表 |
f.close() | 关闭打开的文件 |
如:
f = open('camt.c','rb')
lines = f.readlines()
for line in lines:
print(line.strip().decode('utf-8'))
readlines返回的是一个list列表,list列表中每一项表示文件中的 一行数据/文字
3.用 fileinput操作文件 ( 要先导入fileinput模块:import fileimput )
作用:fileinput可以同时对一个或多个文件中的内容进行迭代,遍历等操作。该模块的 input() 方法有点类似文件的 readlines()方法,区别是前者只是迭代一个对象,每次只生成一行,而后者是一次性读取所有行,当遇到大文件时,无疑前者更有效率。
fileinput的常用可选参数:
inplace:用于决定print输出到哪,若inplace = 0,print 则输出到屏幕(即标准输出),若inplace = 1,则把print 结果写到文件,默认情况下 inplace = 0
backup:指定备份文件的扩展名,如.bak,若备份文件存在,则覆盖
fileinput模块中常用的函数有:
函数 | 功能 |
input() | 返回能够用于迭代 一个或多个文件中所有行 的对象(可以给input传入一个列表) |
filename() | 返回当前文件的名称 |
lineno() | 返回当前读取的行的数量 |
isfirstline() | 返回当前行是否文件的第一行 |
filelineno() | 返回当前读取行在文件中的行数 |
示例一:(打开单个文件)
import fileinput
with fileinput.input('1.txt') as lines:
for line in lines:
print(line.strip())
'''
C
C++
C#
java
python
'''
示例二:(批量处理 txt文件)
import fileinput
#1.txt
C
C++
C#
#2.txt
java
python
#程序
def process(line):
return (line.rstrip()+ ' language')
for line in fileinput.input(['1.txt','2.txt'],inplace=1):
print(process(line))
'''
运行结果:
1.txt:
C language
C++ language
C# language
2.txt:
java language
python language
'''
示例三:(利用fileinput把文件内容替换,并把原有文件备份)
import fileinput
'''
样本文件:1.txt:
C
C++
C#
'''
for line in fileinput.input('1.txt',inplace=1,backup='.bak'):
print(line.rstrip().replace('C++','Java'))
'''
执行后的1.txt:
C
Java
C#
并生成一个 1.txt.bak备份文件
'''
4.利用os模块进行目录操作
Python提供的 os 模块提供了很多对文件或目录进行操作的函数,可以方便地对文件进行重命名,增加/删除目录,复制目录等操作。
4.1获取当前路径
os.getcwd():打印出程序所在的目录
import os
print(os.getcwd())
#打印结果:C:\Users\abc\PycharmProjects\untitled3
4.2获取目录中的内容
os.listdir(path):列出目录路径path下有哪些文件,若不写path,则默认为当前目录
import os
print(os.listdir())
4.3创建和删除目录
os.mkdir(path):path为要创建的目录路径
如在当前目录下创建一个new目录:
import os
os.mkdir('new')
同理,删除目录为:
os.rmdir(path)
4.4判断是否目录,文件
os.path.isdir(path) :path为要判断的路径,返回True or False
os.path.isfile(path):path为要判断的路径,返回True or False
4.5遍历某目录下的所有文件和目录
python中可以使用 os.walk(path) 函数,
os.walk(path)的输出:
os.walk()遍历目录后输出的格式为多个元组,每个元组第一项为遍历的目录名 , 第二项为遍历目录中的子目录列表,第三项为遍历目录中所有文件的列表。
示例一:
import os
for i in os.walk(r'./'): #对当前目录进行遍历
print(i)
'''
打印结果:
('./', ['.idea', 'new'], ['1', '1.jsp', '1.txt', '1.txt.bak', '2.txt', 'camt.c'])
('./.idea', [], ['.name', 'encodings.xml', 'misc.xml', 'modules.xml', 'untitled3.iml', 'workspace.xml'])
('./new', ['新建文件夹'], ['新建文本文档.txt'])
('./new\\新建文件夹', [], ['新建 RTF 文档.rtf'])
'''
示例二:
由于os.walk() 的输出是分三块的(遍历的目录,遍历到的目录名,遍历到的文件名),因此接收 os.walk()元组时也可以用三个参数来接受,分别装三块的数据。
如下程序,我只打印出在当前路径下能遍历到的所有文件:
import os
for path,dir,file in os.walk(r'./'): #对当前目录进行遍历
#print(path)
#print(dir)
print(file)
'''
打印结果:
['1', '1.jsp', '1.txt', '1.txt.bak', '2.txt', 'camt.c']
['.name', 'encodings.xml', 'misc.xml', 'modules.xml', 'untitled3.iml', 'workspace.xml']
['新建文本文档.txt']
['新建 RTF 文档.rtf']
'''