目录
一、open函数应用
在python中,会经常使用到文件,来实现数据的获取,以便于我们进行更多行为操作。
在常规操作文件的时候,主要使用的函数是open()。
这个也是最常用的python中文件操作函数。
文件操作示例:
1. 基本的读取文件内容一定是用open()函数来实现
2. 读取文件,一定是要将文件的路径和文件名全部都明确指定。
3. 相对路径和绝对路径:一般操作文件的时候都会尽可能使用相对路径
相对路径:文件在工程之中,随着工程一起打包的,所以在读取的时候,基于工程本身的路径结构来获取文件。
绝对路径:从物理存放的路径下进行文件的获取。例如:C:\program files\1.txt
相对路径的获取形态比较类似于linux的文件操作
下面就是文件的打开操作:
file = open(file='./file/hcc2.txt', mode='a', encoding='UTF-8')
其中:
file='./file/hcc2.txt'这个设置,是设置打开的文件路径,如果在mode为w或者a的情况下,此路径下不存在此文件,则会自动创建一个文件
mode='a'这个设置,mode指的是对文件的操作权限:
1. 读:r
2. 写:w
3. 追加:a,如果文件不存在,则新建一个文件,然后执行写入操作。
4. 二进制:b,用于操作非文本文件,一般用于图片的操作
encoding='UTF-8'这个设置,encoding指的是设置文件的编码格式,utf-8是文本中有中文的情况下需要设置的格式。
二、文件操作模式
1.读取文件内容
# 基本的文件获取操作:基于相对路径,如果文件中涉及到中文的相关信息,需要调用utf-8的编码模式
file = open(file='./file/hzp.txt', mode='r', encoding='UTF-8')
# 读取文件内的所有内容。但是读取所有内容的形式并不符合实际情况,因为文件可能很大。
print(file.read())
# 这个时候需要,获取文件中的内容,将每一行的信息保存为一个元素,最终形成一个list输出
print(file.readlines()) #输出的内容中的\n表示换行
# 可以一行一行的读取,用file.readline(),如果文件内容读完了,后面读出为空
print(file.readline())
2.读取特定内容的方式
for line in file.readlines():
# print(line)
if '你好' in line:
string = line
print(string)
break
3.文件写入操作
注意在,mode='w'的时候,文件内容是以覆盖的形式写入。在写入操作的最后,一定要记得将文件给关闭掉。
file = open(file='./file/hzp.txt', mode='w', encoding='UTF-8')
# 文件的写入操作:覆盖原有的内容,重新进行写入
file.write('这是新写入的内容,请好好的保存')
# 在文件操作结束之后,一定记得关闭文件流,释放资源,避免出现问题。
file.close()
4.文件追加操作
file = open(file='./file/hzp.txt', mode='a', encoding='UTF-8')
# 文件的写入操作:覆盖原有的内容,重新进行写入.\n是先换行,再追加写入
file.write('\n这是追加的内容')
# 在文件操作结束之后,一定记得关闭文件流,释放资源,避免出现问题。
file.close()
5. 图片的复制操作
注意第一个file的路径的写法,这个r是为了避免路劲中出现关键字影响代码正常运行。r可以原汤化原食。file是绝对路径,file1是相对路径。
# 图片的复制操作
# 打开原图片
file = open(file=r'D:\pic.png', mode='rb')
# 创建复制文件:复制文件本身不存在,需要创建新的文件。
file1 = open(file='./file/pic_copy1.png', mode='wb')
# 执行复制操作
# 1. 原图片的内容获取
content = file.read()
# 2. 将图片的内容写入到复制的文件之中
file1.write(content)
file.close()
file1.close()
三、with open语法应用
常规情况下,我们的操作需要先open,再进行各类文件操作行为,然后对文件进行关闭处理。
为了以防止忘记close,所以可以通过python提供的固定语法结构with open的形态,来进行文件操作。这种语法会在操作结束后,自动进行close处理。
with open(file='../file/hzp.txt', mode='r', encoding='utf-8') as file:
for line in file.readlines():
print(line)
四、文件路径的读取机制
python中,操作文件,是通过文件路径来进行文件的获取的。
但是,在获取文件路径的时候,是基于被运行的py文件所在路径来进行获取的。
如果将上面的代码,进行封装
def read_file():
# 这种路径的写法是不推荐的,因为过于死板,没有办法在其他的路径下应用。初期还是建议做参数的形态来处理。
with open(file='../file/hzp.txt', mode='r', encoding='utf-8') as file:
for line in file.readlines():
print(line)
然后在其他的文件里面去调用read_file()可能会报错,因为在新的文件夹运行这个类的调用时,原先的路径以现在的位置为起点,可能是不存在的
如何解决这个路径问题呢?
答:可以将文件路径作为一个参数的形态来进行传递,就可以避免因为路径错误导致的文件操作失误。将file的路径改为变量path,然后在其他地方调用这个函数的时候,可以这样去写
write_file('../file/hzp.txt')
def write_file(path):
with open(file=path, mode='w', encoding='utf-8') as file:
for line in file.readlines():
print(line)