栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础小知识点5(文件)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础小知识点5(文件)

1.创建文件

f = open("new_file.txt", "w")   # 创建并打开
f.write("some text...")         # 在文件里写东西
f.close()                       # 关闭

这个文件会被保存在哪呢?正常来说,他会保存在你脚本的当前目录下,比如所你运行的是 me.py 脚本, 那么 new_file.txt 就会被创建在这个脚本的同级目录中。"w"中的w规定必须是小写,否则报错!

|- me.py
|- new_file.txt
a=[1,2,3,5]
with open("new_file2.txt", "w") as f:
    for i in range(4):
        f.writelines([f"{a[i]}n"])

上面 这个方式把打开和关闭嵌入到了一个 with 架构中,这样就不用担心忘记关闭文件了, 下面这个案例,这个地方还用了一种写入数据的方式 writelines(), 当你传入的时候像列表样的数据时, 列表中的每个元素就是一行记录,数据会分行来写。注意,在列表里,每个元素最后都最好写一个n来表示要另起一行。不然读出来的时候就黏在一起了。

ps:输出语句中 f "{ xxxxx a[i] xxxxxx    }  ",可以实现将一个字符串中的列表元素进行输出

2.读文件

f = open("new_file2.txt", "r")
print(f.read())
f.close()

读文件就是把"w" 改成"r" ,  进行f.read()操作就可以看到文件的内容。

with open("new_file2.txt", "r") as f:
    print(f.readlines())

在读文件的时候, 也可以 readlines() 直接读出来一个列表。 

with open("new_file2.txt", "r") as f:
    while True:
        line = f.readline()
        print(line)
        if not line:
            break

如果一次性读取一个这么大的文件,很有可能你的内存都放不下。 我们可以一行一行读取,取代一次性读取,不让内存被一次性占满 。注意:readlines() 一次性直接读取了一个列表,而readline()读取了列表的一个元素。

3.文件编码,中文乱码

在做中文项目的时候,有一个很头疼的事情,很有可能你的文件是从不同平台拿过来的,比如 Windows 的文件要在 MacOS 里打开。 英文的还好,一般不会有什么问题,但是中文的就很容易出现编码不一的情况,出现中文乱码。这时候我们怎么办呢? 首先你要弄清楚原文件的编码,通常来说是 utf-8、gbk、gb2312其中的某一种。

下面我模拟一下,有些文件在 Windows 存储的时候,是以 gbk 的格式存储的,下面的 chinese.txt 我就模拟用 gbk 编码保存。 注意这里我选用的写模式 w 还多了一个 b,合起来是 wb,意思是 write binary 形式,取代默认的 text 形式。所以我读的时候, 也加上了一个 b,变成了 rb,read binary。你点运行试试,他会给你出一段乱码,因为Python不识别这段编码后的文本。

with open("chinese.txt", "wb") as f:
    f.write("这是中文的,this is Chinese".encode("gbk"))

with open("chinese.txt", "rb", ) as f:
    print(f.read())
    #print(f.read().decode('gbk'))  # windows在本机尝试,可以试试这个,
                                    # 我的win10可以正常输出

运行结果:

b'xd5xe2xcaxc7xd6xd0xcexc4xb5xc4xa3xacthis is Chinese'

那直接用原始的 r 来读文本呢?mac系统甚至都会报一个错。读不了(我的win10可以正常输出)。

怎么办?方法还是有的,先确认是哪一种文件编码,然后在读的时候,需要传入一个 encoding 的参数,表示用这一种编码来读。 这样中文乱码的问题就顺利解决了(win10和mac都可以正常输出)。

with open("chinese.txt", "r", encoding="gbk") as f:
    print(f.read())

运行结果:

这是中文的,this is Chinese

4.一些常见的模式

r+ 可读可写,没有文件报错,这个模式下 写入内容,会将原内容进行替换。

with open("new_file.txt", "r") as f:
    print(f.read())
with open("new_file.txt", "r+") as f:
    f.write("text has been replaced")
    f.seek(0)       # 将开始读的位置从写入的最后位置调到开头
    print(f.read())

运行结果:

some text.....
text has been replaced

如果使用 r+ 模式写入内容,不用f.seek(0),不输出内容。     

运行结果:

a+  可读写,此模式可在原文本内容的末尾添加新内容

with open("new_file.txt", "a+") as f:
    print(f.read())
    f.write("nadd new line")
    f.seek(0)       # 将开始读的位置从写入的最后位置调到开头
    print(f.read())

 

此模式下,如果不用f.seek(0),原始文本内容和更新以后的文本内容都不会输出。

5.更多读写模式

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号