Python文件处理

python文件处理

打开一个文件,打开的方式就是文件处理。

应用程序不可以直接操作硬件。需要通过os(操作系统)来操作硬件。

python打开文件的格式:

三要素:

open('文件的绝对路径','你要读写还是追加','选择字符编码的类型')

open ('C:UsersASUSDesktop用户.txt','r',encoding='utf-8')

把绝对路径粘贴过来的时候,他的颜色会不对,因为f之类的是转译符。这样打开文件就会。有问题。

对于windows来说,windows10的字符编码是gbk。所以,用什么字符编码写的,就要用什么字符编码来读。

f = open('C:UsersA USSDesktop用户.txt','r',encoding='utf-8')#f就相当于你操作的这一串东西的句柄。以后要想改变你操作的这一串东西,直接对f操作即可。

data = f.read()

print(data)
f.close()
#读完一定要关闭,close做的第一件事是告诉操作系统,我已经读完了这个文件,你帮我去关闭掉,第二件事是回收f这个变量。

如果直接运行会报错,报语法错误,此时有三种解决方案:

第一种:对’’再进行转译

open    ('C:\Users\ASUS\Desktop\用户.txt','r',encoding='utf-8') 

第二种:

open    ('C:/Users/ASUS/Desktop/用户.txt','r',encoding='utf-8')  

第三种:

open    (r'C:UsersASUSDesktop用户.txt','r',encoding='utf-8') 

读文件:

f = open(r'C:UsersfengziDesktopa.txt','r',encoding='utf-8')  

f.read(
4)#4是字符不是字节
data = f.read()#读取光标右边所有字符
print(data)
f.close()

bytes(字节):8位1bytes,1024bytes是1kb。

字符:一个字母就是一个字符。一个汉字也是一个字符。包括空格。

光标:

f = open(r'C:UsersfengziDesktopa.txt','r',encoding='utf-8')  

f.read(
4)
data
= f.read()#读取光标右边所有的字符 f.close() #当你进行了第一次读取,光标的位置发生了变化,现在光标处于第四字节,当在进行读取,如果不指定参数,会读取第四个字节往后的全部内容,不包括第四个字符。
f = open(r'C:UsersfengziDesktopa.txt','r',encoding='utf-8')
f.read()
data
= f.read()#读取光标右边所有字符
print(data)
f.close()
#这样再去读就没有内容,因为第一次的读取已经将光标移动到了最后,当你再进行读取,光标后面是没有内容的。f = open(r'C:UsersfengziDesktopa.txt','r',encoding='utf-8')
data = f.readline(2)#这里面的数字表示读取此行的前两个字符。
print(data)
f.close()
#这是按行去读,默认是读一行内容。

如何按行都读取出来:

for i in f:  

print(f)

 写的方法:

f = open(r'C:UsersfengziDesktopa.txt','w',encoding='utf-8')  #此方法只能写字符串

f.write(’哈哈哈,哈哈哈’)这样的写是会覆盖原有内容。  

f.close()  

f = open(r'C:UsersfengziDesktopa.txt','w',encoding='utf-8')  

f.writelines([’你’,’好’,’美’]) 或 ((’你’,’好’,’美’))把列表或元组所有元素拼接成字符串,拼接成一行,写入文件中。但会覆盖原有内容。  

f.close() 

写的方法不覆盖:

f = open(r'C:UsersfengziDesktopa.txt','a',encoding='utf-8')  

f.write(’哈哈哈,哈哈哈’)  

f.close()  

也可以写入列表  

f.writelines([’sb’,’cvcv’,’sds’]) 

保存文件:

f.flush()

判断文件是否是可读的:

f.readable() 

判断文件是否是可写的:

f.writable() 

                                       bytes类型文件操(汉字在windows10中占2个字节)

以bytes方式对文件进行读取:

f = open(r'C:UsersfengziDesktopa.txt',’rb’)  

print(f.read())  

f.close 

解码:

这样读取出来的是二进制,如果想转成可读的内容。再进行解码。

f = open(r'C:UsersfengziDesktopa.txt',’rb’)  

print(f.read().decode(‘utf-8’))  

f.close

转码:

a = '你好'.encode('utf-8')

bytes类型文件写:

第一种方法:

必须要转换成二进制才能写进去。  

f = open(r'C:UsersfengziDesktopa.txt',’wb’)  

f.write(‘你好’.encode(‘utf-8’))  

f.close 

第二种方法:                       

f = open(r'C:UsersfengziDesktopa.txt',’wb’)  

f.write(b’asd’)  

f.close 

这种的只能写26个字母或数字,汉字转不进去,因为ASCII表,它只认26个英文字母。

文件的光标移动

这种是不需要手动关闭的书写格式

with open(r'C:UsersfengziDesktopa.txt',’r’,encoding=’utf-8’) as f

光标分为三种模式:

首先我们要知道的是当我们使用read读完一个文件的时候,他的光标是处于最后的。

第一种0模式:可以用于bytes类型和字符类型

with open(r'C:UsersfengziDesktopa.txt',’r’,encoding=’utf-8’) as f:  

f.seek(0,0) 

这种模式会把光标移动在最头

第二种1模式:此模式只适用于bytes类型

f.read(1)  

f.seek(1,1)

1代表相对位置,就是读了一个字符的当前位置,而后再往右移一个光标。      

第三种2模式:此模式只适用于bytes类型

f.read(1)  

f.seek(2)

2代表光标移动到最后。  

常用汉字在utf-8中占3个字节。生僻字占得更多。

持续刷新文件,等同于tail –f

监测端:

# tail -f /var/log/message | grep '404'  

import time  

with open(r'C:UsersfengziDesktopa.txt', 'r', encoding='utf-8') as f:  

        while True:  

        data = f.readline()  

        if '404' in data:  

            print(data)  

        else:  

            time.sleep(0.05)  

写入端:

open(r'C:UsersfengziDesktopa.txt', 'a', encoding='utf-8') as f:  

f.write('qwewq4304aaa')  
原文地址:https://www.cnblogs.com/shuaiyin/p/10922681.html