微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python基础之open函数和路径处理

前言

  本次内容主要介绍文件处理open函数以及路径处理。

一、open函数

  根据前面介绍的函数调用方式,调用open函数

#open函数调用
open()

TypeError: open() missing required argument 'file' (pos 1)

  我们发现报错了TypeError,缺少一个位置参数file。open函数是python的一个内置函数,查看源码,我们可以看到open函数有7个参数,包括1个位置参数file和6个认参数。

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):

  创建一个名称为“open函数.txt"的文件,再次调用open函数

法外狂徒张三
王二狗
今天星期日
open('open函数.txt')



Process finished with exit code 0

  调用成功,但是文件未打印内容,那么该如何获取”open函数.txt“的内容呢?

1、文件读取

  根据前面所介绍的,函数有返回值,那我们试着直接通过返回值打印出来。

#open函数调用
f= open('open函数.txt')
print(f)





<_io.TextIOWrapper name='open函数.txt' mode='r' encoding='cp936'>

Process finished with exit code 0

不难看出,打印出的内容一个io的文件对象,后面我们可以通过”对象.方法"的形式调用函数

 

read():读取文件内容。读取的结果是字符串

#open函数调用
f= open('open函数.txt')
f.read()


#报错

 Traceback (most recent call last):
  File "E:\python_workspaces\python基础语法\文件和路径处理\open函数.py", line 3, in <module>
  f.read()

UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 4: illegal multibyte sequence

Process finished with exit code 1

如上所述,这里报错了,UnicodeDecodeError,文件编码错误,现在我们调整open函数传参的编码方式为utf8,并再次调用

#open函数调用
f= open('open函数.txt',encoding="utf8")
cont = f.read()
print(cont)

#运行结果

  法外狂徒张三
  王二狗
  今天星期日

 

readline():读取文件内容,只读取一行内容

#open函数调用
f= open('open函数.txt',encoding="utf8")
content = f.read()
print(content)

#readline()
cont=f.readline()
print(cont)


#运行结果
法外狂徒张三
王二狗
今天星期日

  根据以上运行结果,我们可以看到打印的是第一次读取的内容,content。相当于readline没起作用?这是为什么呢?

当我们看书的时候,眼睛会跟着字体一起移动,当内容读完后,眼睛此时的位置会在文章的最后一个字,同理,当文件读取后,光标的位置就移动到文件的最后了,那么再次读取的时候已经没有内容了。

解决方法1:重新打开文件,然后调用函数读取文件内容
#open函数调用
f= open('open函数.txt',encoding="utf8")
content = f.readline()
print(content)



#运行结果
法外狂徒张三
解决方法2:移动文件光标位置到文件开头,然后重新读取文件内容
#open函数调用
f= open('open函数.txt',encoding="utf8")
content = f.read()
print(content)

#移动光标位置
f.seek(0)
#readline()
cont=f.readline()
print(cont)


#运行结果:
法外狂徒张三
王二狗
今天星期日
法外狂徒张三

readlines():读取文件内容,读取所有的内容。以列表的形式打印出来。

f= open('open函数.txt',encoding="utf8")
content = f.readlines()
print(content)


#运行结果
['法外狂徒张三\n', '王二狗\n', '今天星期日']

2、文件写入

write():文件写入

#open函数调用
f= open('write.txt',encoding="utf8")
#文件写入
f.write('少女的腿毛')


#运行结果
io.UnsupportedOperation: not writable

从上面可以看到,文件写入报错了。找不到write.txt的这个文件。这是我们在文件写入的时候缺少一个参数mode='w'

#open函数调用
f= open('write.txt',encoding="utf8",mode='w')
#文件写入
f.write('少女的腿毛')

打开'write.txt'文件,出现了“少女的腿毛”字样。

重新写入“少女的腿毛2”,

#open函数调用
f= open('write.txt',encoding="utf8",mode='w')
#文件写入
f.write('少女的腿毛2\n')

打开文件后,少女的腿毛变成了少女的腿毛2,文件前面写入的内容被完全覆盖。出现这种现象的原因是文件写入模式,那么有哪些模式呢?

文件模式

常用的模式

1、r模式:只读模式

2、w模式:写入模式,这种模式会覆盖之前写入的内容

3、a模式:追加模式,相当于w模式的进阶,区别在于不会覆盖文件已经写入的内容

4、rb模式:用于读取二进制文件的只读,例如图片和视频等

5、wb模式:以二进制文件的写入

6、ab模式:以二进制形式追加写入内容

详情可见https://www.runoob.com/python/python-func-open.html

write()

3、文件关闭

close()

关闭已经打开的文件文件打开后需要关闭文件,不然会造成资源被大量占用,导致内存不够。

二、with open()

解决用户open()函数调用后忘记关闭文件而导致资源浪费的现象,python提出了with open的用法。语法如下:

#open函数调用
with open('write.txt',encoding="utf8",mode='w') as f:
#文件写入
    f.write('tuimao')

其他的用法与open函数一致。不需要用户关闭文件,with open会自动释放缓存。

三、路径处理

1、系统路径,python能够自动找到的系统路径。

import sys
print(sys.path)

#运行结果

['E:\\python_workspaces\\python基础语法\\文件和路径处理',
'E:\\python_workspaces\\python基础语法',
'D:\\python39\\python39.zip',
'D:\\python39\\DLLs',
'D:\\python39\\lib',
'D:\\python39',
'D:\\python39\\lib\\site-packages']

2、print(__file__)当前python文件的路径

print(__file__)

3、os.path.abspath:绝对路径

import os

print(os.path.abspath('write.txt'))


#运行结果
E:\python_workspaces\python基础语法\文件和路径处理\write.txt

4、os.path.dirname:获取路径目录。dirname()参数是一个路径。

import os
# print(__file__)
psths = os.path.abspath('write.txt')
print(os.path.dirname(psths))

#运行结果
E:\python_workspaces\python基础语法\文件和路径处理

5、os.path.join(a,b):路径拼接

import os
# print(__file__)
psths = os.path.abspath('write.txt')
#在文件和路径处理:E:\python_workspaces\python基础语法\文件和路径处理下创建一个文件write2.txt
write2 = os.path.join(os.path.dirname(psths),"write2.txt")
print(write2)

#open函数调用
with open(write2,encoding="utf8",mode='w') as f:
#文件写入
    f.write('tuimao2')



#运行结果
创建了一个名称为“write2.txt”,内容为
tuimao2的文件

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐