python基础 09 -- 文件读写模式

文本文件可存储的数据量多得难以置信:交通数据、社会经济数据、文学作品等等。

每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此。

文件读取

❶ python的文件读取,又可以细分为:

● 绝对路径的文件读取

● 相对路径的读取

❷ 文件的数据读取,细分为:

● 整个文件内容读取

● 指定文件内容的字符数读取

● 指定文件行数读取

>

下面将依次进行演示

 绝对路径读取(windows)

绝对路径读取:指的是要读取的文件,与当前文件不在同一个文件夹下,需写上完整的文件文件路径和文件名称

>

读取文件关键字open()

open()两个参数:

文件名完整路径

mode="r"(r表示读(read的简写),r可以省略不写,也可以直接r"文件路径和文件名")

#文件读取:

#绝对路径读取文件
file = open("D:\py_pro\lufei\reptile\day09\Rdemo.py")
print(file)
file.colse() #养成好习惯,最后关闭文件


#输出报错:
OSError: [Errno 22] Invalid argument: 'D:\\py_pro\\lufei\reptile\\day09\\Rdemo.py'

因为在python中,\是转义字符,如果想在字符串中表示\,需要使用\\来表示。在你的代码中,\r被解释为回车符,导致路径错误。

解决方案

● 需要将路径中的\替换为/

● 或者使用双反斜杠\\来表示单个反斜杠

>

修改后的代码如下:

#文件读取:

#绝对路径读取文件,以下两种方式二选一即可:
# file = open("D:/py_pro/lufei/reptile/day09/Rdemo.py")
file = open("D:\\py_pro\\lufei\\reptile\\day09\\Rdemo.py")
print(file)
file.colse() #养成好习惯,最后关闭文件

#输出:
<_io.TextIOWrapper name='D:\\py_pro\\lufei\\reptile\\day09\\Rdemo.py' mode='r' encoding='cp936'>

另外,想要快速知道一个文件的绝对路径,可以在pycharm中,找到对应的文件:

右键点击Copy Path/Reference... -> 点击"Absolute Path Ctrl+Shift+ C"即可

相对路径读取

相对路径的读取:指的是要读取的文件与当前文件在同一个文件夹下,可以直接写文件名

示例如下:

#相对路径读取文件:当文件中有中文时,windows系统默认加上encoding="utf-8"
file = open("douban250.html",encoding="utf-8")
print(file)
file.colse() #养成好习惯,最后关闭文件


#输出:
<_io.TextIOWrapper name='douban250.html' mode='r' encoding='utf-8'>

可以看出无论是绝对路径、还是相对路径读取文件,得到的都是一个对象

open只是一个句柄,想要获取文件里的具体数据,就需要再进行文件数据的读取

文件数据读取

读取文件后,得到是一个文件对象,想要获取文件中的具体数据,就需要用到具体的读取数据方法:

● 整个文件内容读取

● 指定文件内容的字符数读取

● 指定文件行数读取

>

代码示例如下:

#相对路径读取文件:当文件中有中文时,windows系统默认加上encoding="utf-8"
file = open("douban250.html", encoding="utf-8")

#获取当前文件的所有数据:
print("所有:",file.read())
#输出:
所有: <!DOCTYPE html>
<html lang="zh-CN" class="ua-windows ua-webkit">
<head>……由于文件内容较多,此处省略



#获取文件的前10个字符:
print("前10个字符:",file.read(10))
#输出:
前10个字符: <!DOCTYPE 


#读取文件的第一行:
print(file.readline())
file.colse() #养成好习惯,最后关闭文件

#输出:
<!DOCTYPE html>

文件读取的正确姿势

通常,读取文件就是将磁盘的数据转到内存上来进行一系列操作,实际应用中读取的数据本身内存特别大,这时候如果全部读取,电脑内存就会崩掉。

>

所以,我们通常是读取文件对象,然后进行循环语句进行需要的信息提取或操作,操作完之后立即进行垃圾回收,以减少电脑内存消耗

#文件读取:
#相对路径读取文件:当文件中有中文时,windows系统默认加上encoding="utf-8"
file = open("douban250.html", encoding="utf-8")

#循环高效操作:
for line in file:
    print(line)

file.colse() #养成好习惯,最后关闭文件


#输出:
<!DOCTYPE html>

<html lang="zh-CN" class="ua-windows ua-webkit">

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <meta name="renderer" content="webkit">……此处省略

文件写入

保存数据的最简单的方式之一是将其写入到文件中。

通过将输出写入文件,即便关闭包含程序输出的终端窗口,这些输出也依然存在:你可以在程序结束运行后查看这些输出, 可与别人分享输出文件,还可编写程序来将这些输出读取到内存中并进行处理。

覆盖写

所谓覆盖写入:

如果没有该文件即创建一个新文件

如果有文件就清空全部文件内容,重新写

示例如下:

file = 'programming.txt'
with open(file, 'w') as file_object:
    file_object.write("I love programming.")

代码运行后,生成一个'programming.txt'文件

重新修改了写如内容: 

file = 'programming.txt'
with open(file, 'w') as file_object:
    file_object.write("hello world!~")

重新执行代码后,并没有重新生成'programming.txt'文件,但是可以看出,文件内容已经更新了:

追加写

所谓追加写入:

如果没有该文件即创建一个新文件

如果文件已存在,就在文件的最后追加新内容

file = 'programming.txt'
with open(file, 'a') as file_object:
    file_object.write("I also love finding meaning in large datasets.\n")
    file_object.write("I love creating apps that can run in a browser.\n")

代码执行后,查看'programming.txt'文件:

python的编码与解码

编码:常用于存储、网络传输,都使用字节进行编码

解码:常用于读文件、读字符串,都使用字节进行解码

>

常见的编码与解码规则有:GBK、UFT8(编码与解码的规则必须一致)

python默认使用的是UTF8

中文文件,如果不使用UFT8就会报错、或者打开文件是乱码,这就是编码与解码问题

>

编码方法:encode("utf-8") 

#编码方法:
s = "i am 明"
s1 = s.encode("utf-8")  #也可以省略-,直接写utf8
s2 = s.encode("GBK")

#解码方法:字节数据对象.decode("规则")
# print(s1.decode("GBK")) #会报错,因为上面用的规则是"utf-8"
print(s1.decode("utf-8"))
print(s2.decode("GBK"))

栗子

比如我在pycharm中有一个文本文件,里面内容是中文

当我在另一个py文件中进行读取时并打印时,会产生如下报错:

是因为:我的文本文件内容全是中文,在with open时没有定义编码规则,导致无法解码

解决方案:with open括号里加上编码规则即可正常读取内容:


os模块

os模块是Python标准库中的一个模块,提供了与操作系统交互的功能。

它允许你访问操作系统的功能,如文件和目录操作、进程管理、环境变量等。

os常用函数

文件和目录操作

  • os.getcwd():获取当前工作目录的路径。
  • os.chdir(path):改变当前工作目录为指定路径。
  • os.listdir(path):返回指定目录下的所有文件和目录的名称列表。
  • os.mkdir(path):创建一个新的目录
  • os.mkdir(文件名):在当前启动文件的目录下创建一个新的文件夹
  • os.rmdir(path):删除指定目录。
  • os.remove(path):删除指定文件。

路径操作

  • os.path.join(path1, path2, ...):将多个路径组合成一个路径。
  • os.path.abspath(path):返回指定路径的绝对路径。
  • os.path.dirname(path):返回指定路径的目录名。
  • os.path.basename(path):返回指定路径的文件名。
  • os.path.exists(path):判断指定路径是否存在。
  • os.path.isfile(path):判断指定路径是否为文件。
  • os.path.isdir(path):判断指定路径是否为目录。

环境变量

  • os.environ:一个包含当前环境变量的字典。
  • os.getenv(var_name):获取指定环境变量的值。
  • os.putenv(var_name, value):设置指定环境变量的值。

进程管理 

  • os.system(command):执行系统命令。
  • os.popen(command):执行系统命令并返回一个文件对象。
  • os.kill(pid, signal):向指定进程发送信号。
  • os.getpid():获取当前进程的ID。
  • os.getppid():获取当前进程的父进程ID。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 文本文件的随机读写是指在文件中任意位置读取或写入数据。在Python中,可以使用内置的open()函数打开文件,并使用seek()函数设置读写位置。具体步骤如下: 1. 使用open()函数打开文件,设置文件打开模式为读写模式("r+")或者只写模式("w")。 2. 使用read()函数读取文件中的数据,或者使用write()函数写入数据。 3. 使用seek()函数设置读写位置,可以设置为文件开头(),文件末尾(-1),或者任意位置。 4. 使用tell()函数获取当前读写位置。 5. 使用close()函数关闭文件。 需要注意的是,在进行随机读写操作时,需要确保文件已经存在,并且文件打开模式为读写模式或者只写模式。另外,写入数据时需要注意文件指针的位置,避免覆盖已有数据。 ### 回答2: Python文件之文本文件的随机读写是指在一个文本文件中进行随机访问并读写指定位置和指定长度的数据。在Python中,可以使用seek()方法来进行文件指针的定位,然后使用read()和write()方法来对文件进行读取和写入操作。 当需要随机读取文本文件的某一部分时,可以使用seek()方法将文件指针定位到所需位置,然后使用read()方法来读取指定长度的数据。例如,如果想从文件的第10行读取5个字符,可以使用以下代码: ```python with open('file.txt', 'r') as f: f.seek(9) # 将文件指针定位到第10行 data = f.read(5) # 读取5个字符 print(data) ``` 当需要对文本文件的某一部分进行修改时,可以使用seek()方法将文件指针定位到所需位置,然后使用write()方法来进行修改。例如,如果想将文件的第10行的前5个字符修改为"hello",可以使用以下代码: ```python with open('file.txt', 'r+') as f: f.seek(9) # 将文件指针定位到第10行 f.write('hello') # 修改文件内容 f.seek(0) # 将文件指针定位到开头 print(f.read()) # 输出修改后的文件内容 ``` 需要注意的是,在进行文件读写操作时,需要使用with语句来确保文件在使用完毕后正常关闭,避免内存泄漏的问题。 总之,Python文件之文本文件的随机读写是一项非常有用的技能。它可以让我们对大型文本文件进行灵活的读写操作,可以提高程序的效率和灵活性。需要我们在实践中不断地掌握和运用。 ### 回答3: Python提供了许多方法对文本文件进行随机读写,这些方法可以让我们更加方便地处理大型的文本文件,节省内存并提高程序的效率。 在Python中,我们可以使用open()函数打开一个文本文件,然后使用read()或readlines()方法来读取文件中的数据。其中,read()方法可以读取整个文件的内容,而readlines()方法可以按行读取文件的内容。例如: ``` f = open('text_file.txt', 'r') content = f.read() # 读取整个文件的内容 lines = f.readlines() # 按行读取文件的内容 f.close() ``` 如果我们要对文本文件进行随机读写,可以使用seek()和tell()方法。seek()方法可以将读取位置移动到文件的任意位置,而tell()方法用于返回当前读取位置的字节数。例如: ``` f = open('text_file.txt', 'r+') f.seek(5) # 将读取位置移动到第5个字符 f.write('Hello') # 在原有内容上插入'Hello' f.seek(0) # 将读取位置移动到文件开头 content = f.read() # 读取整个文件的内容 f.close() ``` 此外,我们还可以使用with语句自动关闭文件,以免遗漏close()方法,造成资源浪费。例如: ``` with open('text_file.txt', 'r') as f: content = f.read() # 读取整个文件的内容 ``` 总之,对于文本文件的随机读写,Python提供了许多灵活的方法,只需要根据实际需求选择合适的方法即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值