• 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')  
  • 相关阅读:
    java_十进制数转换为二进制,八进制,十六进制数的算法
    vim常用命令 vim键盘布局
    百度HTTPS加密搜索有什么用?
    delete
    hadoop2的automatic HA+Federation+Yarn配置的教程
    MinGW GCC下sleep()函数问题
    delete
    8天学通MongoDB——第一天 基础入门
    8天学通MongoDB——第六天 分片技术
    8天学通MongoDB——第五天 主从复制
  • 原文地址:https://www.cnblogs.com/shuaiyin/p/10922681.html
Copyright © 2020-2023  润新知