码迷,mamicode.com
首页 > 编程语言 > 详细

python基础之文件基本操作

时间:2020-01-30 21:20:55      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:指针   转义符   odi   encode   nes   保存   元素   表示   通过   

代码的存储可以通过定义变量来存储,但是变量存储代码,这只能存在内存中,一旦关闭,原先的代码就会消失,所以我们需要把代码通过文件的形式,永久将代码保存在硬盘中,所以需要学会文件的基本操作。

文件的只读和只写模式分别为r和w

1. 先建立一个文件demo1.txt , 并写入内容

查看demo1文件中的内容

# 我们在桌面上操作文件:1.打开文件;2.读取文件; 3.关闭文件
f = open("demo1.txt", "r", encoding="utf-8")
#
f = open(r"C:\Users\dyl\Desktop\demo3.txt", "r", encoding=‘utf-8‘) r代表转义,后面的r代表read模式
print(f.read()) 
f.close()
"""
1. 打开文件操作 demo1.txt 文件的路径 文件的路径可以是绝对路径,也可以是相对路径,绝对路径比较死,如果文件的路径发生了改变,那么打开文件的路径就要相对地改,所以我们尽量用相对路径
如果是绝对路径,需要用r""转义符 "r" 是只读模式 encoding 是指定文件的编码方式 如果桌面文件的编码方式与指定的编码方式不一样,那么就会报错 (unicode error) ‘unicodeescape‘ codec can‘t decode bytes in position 2-3: truncated \ UXXXXXXXX escape 2.读取文件内容 读取文件内容的方法:read 调用方法 变量 f.read() 打印读取的内容 print(f.read()) 3. 关闭文件
文件对象打开后,一定要记得关闭,如果不关闭,这个文件就会占用操作系统的资源,而且操作系统同一时间打开的文件数量是有限的
f.close() 

"""

2. 只写模式

# 只写入模式 w
s = """
春晓
春眠不觉晓
处处闻笛鸟
夜来风雨声
花落知多少
"""

f = open("demo1.txt", "w", encoding="utf-8")
# writelines 和write的用法相似,但是writelines可以传入字符串,也可以传入字符序列,但是不能传入数字,每个元素之间如果要换行,就需要用\n换行符,write只能传入字符串
f.write(s) f.close()
# 写入之后读取 f = open("demo1.txt", "r", encoding="utf-8") print(f.read()) f.close()


春晓
春眠不觉晓
处处闻笛鸟
夜来风雨声
花落知多少

 

注意:文件对象打开后,一定要记得关闭,如果不关闭,这个文件就会占用操作系统的资源,而且操作系统同一时间打开的文件数量是有限的

 

只读和只写时,都是先将内容读或者写到缓存区里面,然后等缓存区的空间都满了之后,操作系统就会将内容写到硬盘里面,缓存区里面的内容每满一次,操作系统就会写一次。这样写的劣处就是,我们写的内容可能都没有写到硬盘里面,一旦断电,写的东西就会消失,所以我们需要flash,不用等操作系统来写,直接刷新缓存区,保存内容
f = open("demo.txt", "w", encoding="utf-8")
f.writelines(["China\n", "World\n", "Fuiture\n"])
# 刷新缓存区,保存内容
f.flush()
f.close()

f = open("demo.txt", "r", encoding="utf-8")
print(f.read())
f.flush()
f.close()

 

# 关闭语句f.close(),可以节省内存中缓存资源,所以这句一定要带上,但是每对文件增删改查一次,就需要写一次,这并不方便,with语句就可以省去这一步

with open("demo1.txt", r, encoding=utf-8) as f:
    print(f.read())

春晓
春眠不觉晓
处处闻笛鸟
夜来风雨声
花落知多少

with只写进入

# 关闭语句f.close(),可以节省内存中缓存资源,所以这句一定要带上,但是每对文件增删改查一次,就需要写一次,这并不方便,with语句就可以省去这一步

with open("demo1.txt", r, encoding=utf-8) as f:
    print(f.read())

s2 = """
满城尽带黄金甲,不破楼兰终不还。
"""
with open("demo1.txt", w, encoding=utf-8) as f:
    f.write(s2)

with open(demo1.txt, r, encoding=utf-8) as f:
    print(f.read())

满城尽带黄金甲,不破楼兰终不还。

3. tell和seek

tell() 以bytes为单位,从文件头到当前指针所在的位置
seek() 以bytes为单位,光标的偏移量
s3 = s2.encode()
print(s3)  # b‘\n\xe6\xbb\xa1\xe5\x9f\x8e\xe5\xb0\xbd\xe5\xb8\xa6\xe9\xbb\x84\xe9\x87\x91\xe7\x94\xb2\xef\xbc\x8c\xe4\xb8\x8d\xe7\xa0\xb4\xe6\xa5\xbc\xe5\x85\xb0\xe7\xbb\x88\xe4\xb8\x8d\xe8\xbf\x98\xe3\x80\x82\n‘
# utf-8编码中文字符,是三个字节编码一个中文字符
with open("demo1.txt", w, encoding=utf-8) as f:
    f.write(s2)

with open(demo1.txt, r, encoding=utf-8) as f:
    print(f.tell())   # 0  光标的位置
    print(f.read())
    print(f.tell())   # 52  光标的位置
    f.seek(0)   # 将光标移到最前面
    print(f.tell())  # 0

这个时候,文件已经建立,如果文件不存在,那么

r和w  表示只读和只写  文件存在的情况下,写入会覆盖掉原先的内容
with open("demo.txt", r, encoding=utf-8) as f:
    print(f.tell())
    print(f.read())

# w只写, 文件已经存在,会覆盖掉原先的内容,如果文件不存在,就会创建一个文件
with open("demo.txt", "w", encoding="utf-8") as f:
    f.write("中国加油")

with open("demo2.txt", w, encoding=utf-8) as f:
    f.write("hello world!!!")

 

4. 非文本内容的基本操作,rb和wb

rb和wb 非文本的只读和只写

li = ""
with open("函数内循环.png", "rb") as f: # 这本身就是二进制的,所以不用指定编码格式
# 二进制我们一般不会打印出来,而是用一个变量来接收,存起来
    li = f.read()

# 将这个变量写入到一个新的图片文件里面
with open("test.png", "wb") as f:
    f.write(li)

5. a 追加模式

如果文件原本就存在,就在原本的文件的末尾加入内容,如果文件不存在,那么创建新文件,并写入内容

a 追加

with open("demo.txt", "r", encoding="utf-8") as f:
    print(f.read())

with open("demo.txt", "a", encoding="utf-8") as f:
    f.write("\n将军百战死")

with open("demo.txt", "r", encoding="utf-8") as f:
    print(f.read())

 

6. r+    w+   a+

r+ w+ a+
"""
r+: 读写,指针在文件开头
w+:  读写,文件存在的话,那么写入内容,如果文件不存在,那么创建文件新文件,写入内容
a+:  读写,文件存在的话,则在文件末尾追加,如果文件不存在,那么创建新文件,并写入内容
"""

with open("demo2.txt", "r+", encoding="utf-8") as f:

    f.write("\nhello world!!!   come on!!!")
    print(f.read())
    print(f.tell())

with open("demo3.txt", "w+", encoding="utf-8") as f:
    f.write("\n你好世界")
    print(f.read())

with open("demo1.txt", "a+", encoding="utf-8") as f:
    f.write("\n中国你好")
    print(f.read())

 

python基础之文件基本操作

标签:指针   转义符   odi   encode   nes   保存   元素   表示   通过   

原文地址:https://www.cnblogs.com/zgzeng/p/12238542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!