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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值