- A+
打开关闭文件
我们使用open
函数打开文件夹,open
需要两个参数,第一个参数是文件路径或者文件名,第二个是文件打开的模式。模式有如下的选项:
- "r",以只读模式打开,你只能读取文件但不能编辑/删除文件的任何内容
- "w",以写入模式打开,如果文件存在将会删除里面的所有内容,然后打开这个文件进行写入
- "a",以追加模式代开,写入到文件中的任何数据将自动添加到末尾
- "b",以二进制的方式打开
默认为只读模式。
我们下面看一个例子:
- file = open('byr.py','r') #打开文件
- file.readlinereadline() #读取文件的一行
- >> #这里会输出文件第一行的内容
- file.close()#记得文件打开后要关闭
在实际情况中,我们会采取with
语句处理文件对象,他会在文件用完之后自动关闭。下面我们来看一个例子。
- with open('byr.py') as file:
- count=0
- for line in file:
- print(line) #每一行打印文件内容
- count = count+1
- print(count) #输出文件总行数
我们在上面这个程序中没有使用close
,但是程序在执行到with
代码块之外的时候,文件会被自动关闭。
读取文件内容
在上面其实已经讲到了一些关于文件内容读取的内容,即readline
,这里在把文件内容读取讲得详细一点。
下面介绍三个常用的函数
-
read()
读取整个文件,要谨慎使用,可能文件过大 -
readline
每次读取文件的一行 -
readlines
读取文件的所有行,返回一个列表,列表中每个元素对应文本中的一行字符串
其实,在使用with
的时候,返回的file已经可以直接进行文件每一行的读取了.
- with open('byr.py') as file:
- print(file)
- print(list(file)) #可以显示每一行的内容
- for line in file:
- print(line) #这样就可以输入文件的每一行
写入文件
写入文件最常用的方法是write()
,下面看一个例子
- with open('byr.txt','w') as file:
- file.write('byr test')#这样默认是不换行的
- file.write('byr test \n') #这样就是换行的
- file.write('byr test')
上面这个程序我们使用w
模式打开,如果文件不存在就会新建,如果文件存在就会把原来的内容覆盖掉。
那么要是我们想要向文件里增加内容应该怎么办呢?我们可以使用a
追加模式打开文件:
- with open('byr.txt','a') as file:
- file.write('byr test')#这样默认是不换行的
- file.write('byr test \n') #这样就是换行的
- file.write('byr test \n')
os.path文件与文件夹操作
下面介绍os.p这个常用的标准库,这个库主要是用于处理文件和文件夹,下面举一些常用的用法.
- os.path.abspath(path) 返回文件的绝对路径
- os.path.basename(path) 返回文件名
- os.path.dirname(path) 返回文件路径
- os.path.isfile(path) 判断路径是否为文件
- os.path.isdir(path) 判断路径是否为目录
- os.path.exists(path) 判断路径是否存在
- os.path.join(path1[, path2[, ...]]) 把目录和文件名合成一个路径
- import os
- filename = '/home/wmn/byr.py'
- print(os.path.abspath(filename))#返回文件的绝对路径
- >> '/home/wmn/byr.py'
- print(os.path.basename(filename))#返回文件名
- >> 'byr.py'
- print(os.path.dirname(filename))#返回文件的路径
- >> '/home/wmn'
- print(os.path.isfile(filename))#判断是否是文件
- >> True
- print(os.path.isdir(filename))#判断是否是目录
- >> False
- print(os.path.exists(filename))#判断路径是否存在
- >> True
- print(os.path.join('/home/wmn','byr.txt'))#把目录和文件名合在一起
- >> '/home/wmn/byr.txt'
这个还是很常用的,更多的内容可以查看文档。
文件的填充和裁剪
有的时候会对文件进行填充和裁剪. 比如都裁剪为相同的大小. 这里就说明以下如何进行文件的裁剪和填充.
文件填充
- with open('my_file', 'ab') as f:
- f.write(bytes([0]*1000))
上面的代码时向文件中填充0, 填充1000bytes, 最终的效果如下所示.
![Python入门教程[5]-文件处理](https://img.mathpretty.com/20191128_221745_u3k2t98.jpg)
文件裁剪
我们希望直接对文件进行末尾截断. 比如100bytes的文件, 我们只保留前50bytes的内容. 我们可以使用f.seek()来定位到文件的某个byte, 再使用f.truncate()来删除该比特后面的所有内容.
如我们生成一个101byte的文件, 文件内容如下.
![Python入门教程[5]-文件处理](https://img.mathpretty.com/20191128_223536_ogw8ctv.jpg)
我们希望保留前50bytes, 也就是到十六进制的31, 我们可以执行下面的操作.
- with open('my_file', 'ab') as f:
- f.seek(50)
- f.truncate()
这样就是保留前50bytes. 最终的结果如下图所示.
![Python入门教程[5]-文件处理](https://img.mathpretty.com/20191128_223739_lzb3k82.jpg)
同时打开多个文件
我们可以使用with来打开多个文件,下面介绍两种写法:
方法一:
- with open('file1') as f1, open('file2') as f2, open('file3') as f3:
- for i in f1:
- j = f2.readlinereadline()
- k = f3.readlinereadline()
- print(i,j,k)
方法二:
- from contextlib import nested
- with nested(open('file1'), open('file2'), open('file3')) as (f1,f2,f3):
- for i in f1:
- j = f2.readlinereadline()
- k = f3.readlinereadline()
- print(i,j,k)
一次读取文件N行
有的时候我们会遇到文件比较大,不能一次性全部读取,需要N行读一次,下面介绍一下方法:
- with open(...) as f:
- while True:
- next_n_lines = list(islice(f, n))
- if not next_n_lines:
- break
- else:
- # process next_n_lines
一个详细的例子可以参考:Python多进程用法中的文件处理的例子。
文件内容修改
有的时候我们需要对源文件进行一些修改,可以使用如下的方式进行修改。
- def alter(file,old_str,new_str):
- """
- 替换文件中的字符串
- :param file:文件名
- :param old_str:就字符串
- :param new_str:新字符串
- :return:
- """
- file_data = ""
- with open(file, "r", encoding="utf-8") as f:
- for line in f:
- if old_str in line:
- line = line.replace(old_str,new_str)
- file_data += line
- with open(file,"w",encoding="utf-8") as f:
- f.write(file_data)
- alter("./20190301.csv", "\,", ",")
获取文件夹内所有文件
这一部分可以查看,Python入门教程[7]-常用模块中的os模块的使用。
- 微信公众号
- 关注微信公众号
-
- QQ群
- 我们的QQ群号
-
感谢你能看到最后,谢谢对本站的支持!!!
谢谢支持!
记得推荐给大家!
点