首页 > 编程语言 >python基础之open函数和路径处理

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

时间:2022-08-14 11:35:00浏览次数:66  
标签:文件 python 路径 write print txt 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的文件

 

标签:文件,python,路径,write,print,txt,open
From: https://www.cnblogs.com/xiaofenggou/p/16585067.html

相关文章

  • 用python进行统计分析(2)
    其他描述性统计量#方差np.var(df["wt"])#标准差np.std(df["wt"])#众数stats.mode(df["wt"])#偏度stats.skew(df["wt"])#峰度stats.kurtosis(df["wt"])#正态......
  • 基于C++的OpenGL 09 之材质
    1.引言本文基于C++语言,描述OpenGL的材质前置知识可参考:基于C++的OpenGL08之基础光照-当时明月在曾照彩云归-博客园(cnblogs.com)笔者这里不过多描述每个名词......
  • 研发工程师L1Python学习
    汉诺塔Description有三个立柱A、B、C。A柱上穿有大小不等的圆盘N个,较大的圆盘在下,较小的圆盘在上。要求把A柱上的圆盘全部移到C柱上,保持大盘在下、小盘在上的规律(可借助B......
  • 几行 Python 代码就可以提取数百个时间序列特征
    时间序列数据是随着时间的推移反复捕获的变量值,随着时间的推移可以产生一系列的按时间顺序索引的数据点。在时间序列中,数据具有自然的时间顺序,即一个变量在特定时间的值依......
  • 【WPF】图形、几何图形、图画、路径、画刷
    概览 图形、几何图形、图画、路径具体的内容WPF编程宝典1213章画刷 ......
  • 转:python表达式和语句的区别
    本文摘自:Python表达式和语句之间的区别 表达式是一个值,它的结果一定是一个Python对象。当Python解释器计算它时结果可以是任何对象。例如42,1+2,int(‘123’),range(10)等......
  • python中实现依据序列名称排序并输出
     001、(base)root@PC1:/home/test2#lsa.fastatest.py(base)root@PC1:/home/test2#cata.fasta##测试fasta文件>gene2mycAGCTGCCTAAGC......
  • 两种获取链接响应码的方法 (python实现)
    两种获取链接响应码的方法(python实现)背景:工作中需要测试某个包是否正常上传到了yum仓库,所以需要检测对应地址是否有效,发现之前使用requests库写的代码出奇的慢,所以......
  • 简述 Python 的深浅拷贝以及应用场景
    简述Python的深浅拷贝以及应用场景导入模块:importcopy浅拷贝:copy.copy深拷贝:copy.deepcopy浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。所......
  • python中 把每条FASTA序列分割成特定个字母一行的序列
     001、(base)root@PC1:/home/test2#lsa.fastatest.py(base)root@PC1:/home/test2#cata.fasta##测试fasta文件>gene1mycAGCTGCCTAAGCGGCATAGC......