python基础4文件操作

在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

操作系统都有自己的编码,文件打开时如果你不指定编码方式就会默认使用操作系统的编码。win操作系统:GBK.。Mac/linux操作系统:utf-8.

 

f=open("nihao","w",encoding="utf-8")
f.write("你好我的做过")
f.close

打开文件方:1.两个文件在同一路径内,直接写名字。

      2.两个文件不在同一路径内。用写入文件的绝对路径,绝对路径不区分大小写,我试过。文件的路径需要用取消转译的方法表示。

转义字符是一种特殊的字符常量。转义字符以反斜线""开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。

在Unix和Web用正斜杠/ 来表示路径的分割,

在Windows中,路径分隔采用反斜 杠"",比如"C:WindowsSystem"。 

但是在打开文件的方式中需要注意:因为open里的路径用引号包裹上,就形成了字符串,由于反斜杠在字符串中是转义字符的意思,会把后边的内容转义,所以我们要避免转义,让它表达它原来分割路径的意思,有三种方法可以取消转义:

这里有三种方式:

方式一:前边加r(不区分大小写)路径也不区分大小写。

f=open(r"C:Users张守业Desktop111.txt","w",encoding="utf-8")
f.write("你好我的做过")

方式二:单斜杠变为双斜杠\

f=open("c:\users\张守业\Desktop\aBC.txt","w",encoding="utf-8")
f.write("")

方法三:用正斜杠/来代替反斜杠/

with open("C:/Users/张守业/Desktop/你.txt",encoding="Gbk") as f:
   print( f.read())

文件写入:

w: 写模式。不存在的文件会创建一个文件,再写入。如果有会清除原文件再写入。encoding的意思就是你写入的字符串需要转换成什么编码方式保存起来

w+:写读模式。不存在的文件会创建一个文件,再写入。如果有会清除原文件再写入。写完后可以读取。注意f.read()时,前边一定要有一个f.seek(0),这样才能从头开始读取,否则读不出东西。因为对于read模式,指针在哪里,就从哪里开始读,write后,指针在文档最后,所以读不出东西。

wb: 二进制写读模式:写入二进制文件。

f=open("歌词","w+",encoding="utf-8")
f.write("我是中国人")
f.seek(0)  #一定要有这个
print(f.read())
f.close()

a:追写模式:和w相同,他不会清除原文件,会在文档末尾继续接着写。

a+:追写读模式。和w+相同,他不会清除原文件,会在文档末尾继续接着写。

ab二进制追加模式。

非文本文件读取:rb

对于非文本文件(例如图片视频),我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

rb 
wb
ab
#注:以b方式打开时,因为要读取的二进制的文件,读取的内容即是字节类型(bytes),所以就不需要指定encode了.

文件读取的第一种方法:f.read(). 一次性读取完。以r模式打开按字符读,以rb的模式打开按字节

文件读取的第二种方法:f.readline().strip()逐行读取#strip删除空格,换行符,制表符。

文件读取的第三种方法:f.readlines()返回一个列表,将文件的每一行作为列表的每一项返回一个列表。

文件读取的第四种方法: for i in f  节省内存每一次只存一次,这个方法最常用。注意这个是逐行的读取,而不是一个个的字读。这个和单个字符串不一样,因为这是打开文件特别规定的。

例子:(文件也是一个迭代器)

with open("产品",encoding="utf-8") as f:
    for i in f:                    ###这里不是f=f.read(),然后再for i in f. 这样做是错误的。
        i=i.strip()
        print(i)

r:读模式。

r+ 读写模式。

rb 二进制读模式

seek() 方法用于移动文件读取指针到指定位置,光标移动到第几个字节。 f.seek(0)移动到开始,f.seek(0,2)移动到文件末尾。

tell():告诉光标在第几个字节。

truncate():从文件开始的位置,只保留指定字节的内容

换行符是  2个字符位,如果是 就是一个字符位,但window会自动在 前加 空格就是1个字符位,

文件的关闭:

需要注意的是:文件读写操作完成后,应该及时关闭。一方面,文件对象会占用操作系统的资源;另外一方面,操作系统对同一时间能打开的文件描述符的数量是有限制的,如果不及时关闭文件,还可能会造成数据丢失。因为将数据写入文件时,操作系统不会立刻把数据写入磁盘,而是先把数据放到内存缓冲区异步写入磁盘。当调用close方法时,操作系统会保证把没有写入磁盘的数据全部写到磁盘上,否则可能会丢失数据。

文件的关闭有两种方法:

方法一:文件最后加入f.close( )

方法二:用第一种方法关闭文件时比较麻烦,经常忘记写f.close(),为了避免这个问题,出现了一个新方法

with open("产品","r",encoding="utf-8") as f :
     print  (f.read())   #这里就不需要加f.close( )

文件的修改:

python本身没有文件直接修改原文件功能,但是可以间接的的实现。

主题思路:1.把原文件的内容存到一个变量中。

     2.把老词语替换成新词语

     3.创建一个新文件,把原文件的内容写到新文件中。

     4.把新文件的名字改成原文件的名字。

方法一:

with open("歌词","r",encoding="utf-8") as f:
    old_content=f.read()
    new_content=old_content.replace("我们","we")
    print(new_content)
    f.close()
with open("歌词2","w",encoding="utf-8") as f2:
    f2.write(new_content)
    f.close()

import os
os.remove("歌词")
os.rename("歌词2","歌词")
 

方法二: 运用for 循环的方法

with open("歌词","r",encoding="utf-8") as f,open("歌词2","w",encoding="utf-8") as f2:  注意文件变量不能是一样的
    for line in f:
        if line.strip():            #注意不要把每句话的换行符给去掉
            new_line=line.replace("我们","we")
            f2.write(new_line)
import  os
os.remove("歌词")
os.rename("歌词2","歌词")

题目:

把(0,99)中偶数写入文档里,并竖行读取它。

f=open("歌词","w+",encoding="utf-8")
for i in range(0,100,2):
    i=str(i)
    f.write("{}
".format(i))
f.seek(0)
print(f.read())
原文地址:https://www.cnblogs.com/sticker0726/p/7755871.html