python文件操作

1.读文件

  • 读文本文件

    """
    1:打开文件
    路径:相对路径:file/info.txt
         绝对路径:E:\\pycharm_shixun\\python数据分析\\模块二函数与模块\\file\\info.txt
    模式:'rt'  读文本
    """
    #打开文件
    f=open(r'file/info.txt',mode='rt',encoding='utf-8')
    #读取文件
    data=f.read()
    #关闭文件
    f.close()
    
  • 读图片等非文本文件

    #读图片,模式需要rb
    f1=open('file/a1.png',mode='rb')
    content=f1.read()
    f1.close()
    

注意事项:

  • 路径

    • 相对路径

      f=open(r'file/info.txt',mode='rt',encoding='utf-8')
      data=f.read()
      f.close()
      
    • 绝对路径

      # windows系统路径应该为\\,\会有转义问题
      f=open(r'E:\\pycharm_shixun\\模块二\\file\\info.txt',mode='rt',encoding='utf-8')
      data=f.read()
      f.close()
      
  • 读文件,文件不存在会报错,要判断

  • 判断路径是否存在

    import os
    """
    1:打开文件
    路径:相对路径:file/info.txt
         绝对路径:E:\\pycharm_shixun\\python数据分析\\模块二函数与模块\\file\\info.txt
    模式:'rt'  读文本
    """
    #读文件,文件不存在会报错,要判断
    # windows系统路径应该为\\,\会有转义问题
    file_path='E:\\pycharm_shixun\\python数据分析\\模块二函数与模块\\file\\info.txt'
    exists=os.path.exists(file_path)
    if exists:
        f=open(r'file/info.txt',mode='rt',encoding='utf-8')
        data=f.read()
        f.close()
        print(data)
    else:
        print('文件不存在')
    
  • 文件不存在,w模式会新建然后再写入内容;文件存在时,w模式会清空文件在写入内容

2. 写文件

  • 写文本文件

    #写入文件,文件不存在自动创建
    f=open('file/t2.txt',mode='wt',encoding='utf-8')
    f.write('王晓宇')
    f.close()
    
    f2=open('file/t2.txt',mode='wb')
    f2.write('王晓宇'.encoding('utf-8'))
    f2.close()
    
  • 写图片等文件

    f2=open('file/a2.png',mode='wb')
    f2.write(content)
    f2.close()
    

3.文件打开模式

========= ===============================================================
Character Meaning
--------- ---------------------------------------------------------------
'r'       open for reading (default)
'w'       open for writing, truncating the file first
'x'       create a new file and open it for writing
'a'       open for writing, appending to the end of the file if it exists

'b'       binary mode
't'       text mode (default)

'+'       open a disk file for updating (reading and writing)

The default mode is 'rt' (open for reading text).

常见文件打开模式应用:

  • 只读:r,rt,rb 【会用】

    • 存在,读
    • 不存在,报错
  • 只写:w,wt,wb 【会用】

    • 存在,清空写
    • 不存在,创建写
  • 只写:a,at,ab【尾部追加写】【会用】

    • 存在,尾部追加写
    • 不存在,创建写
  • 只写:x,xt,xb

    • 文件存在,报错
    • 文件不存在,创建再写
  • 可读可写(+)

    • r+,rt+,rb+,默认光标在起始位置

      f=open('file/info.txt',mode='rt+')
      #先读:读到最后
      data=f.read()
      print(data)
      #再写,在最后写
      f.write('你好')
      f.close()
      
      f=open('file/info.txt',mode='rt+')
      #先写:起始位置写,覆盖了原先的值
      f.write('你是谁')
      #再读:先写光标移动,从光标后面读
      data=f.read()
      print(data)
      f.close()
      
    • w+,wt+,wb+,默认光标起始位置(清空文件)

      f=open('file/info.txt',mode='wt+')
      data=f.read()
      print(data)  #清空文件,data为空
      f.write('你是谁')
      #移动光标到起始位置
      f.seek(0)		
      #读取所有内容
      data1=f.read()
      print(data1)
      f.close()
      
    • x+,xt+,xb+,默认光标位置:起始位置(新文件)

    • a+,at+,ab+:默认光标位置:末尾

      f=open('file/info.txt',mode='at+')
      #尾部追加
      f.write('你是谁')
      #移动光标到最前
      f.seek(0)
      #读取所有内容
      data=f.read()
      print(data)
      f.close()
      

4.常见功能

  • read,读

    • 读【常用】

      #读文本
      f=open(r'file/info.txt',mode='rt',encoding='utf-8')
      data=f.read()
      f.close()
      
      #读图片,模式需要rb
      f1=open('file/a1.png',mode='rb')
      content=f1.read()
      f1.close()
      
    • 读N个字符(字节)【会用到】

      王小雨
      #读一个字符
      f=open(r'file/info.txt',mode='rt',encoding='utf-8')
      data=f.read(1)
      f.close()
      data  王
      
      wxy
      #读一个字节
      f=open(r'file/info.txt',mode='rb')
      data=f.read(1)
      f.close()
      data  w
      
  • readline,读一行

    f=open(r'file/info.txt',mode='rt',encoding='utf-8')
    data=f.readline()
    f.close()
    
  • redlines,读所有行,每行作为列表的一个元素

    f=open(r'file/info.txt',mode='rt',encoding='utf-8')
    for line in f.readlines:
        print(line)  #每行
    f.close()
    
  • 循环,读大文件【常见】

    f=open(r'file/info.txt',mode='rt',encoding='utf-8')
    for line in f:
        print(line.strip())  #每行
    f.close()
    
  • write,写

  • flush,刷到硬盘(立即将缓冲区的数据刷到硬盘)

    f=open(r'file/info.txt',mode='rt',encoding='utf-8')
    #不是写到硬盘,而是写到缓冲区,系统会将缓冲区的内容刷到硬盘
    f.write('wxy')
    f.flush()
    f.close()
    
    #追加用户案例
    f=open('file/account.txt',mode='a')
    while True:
        user=input('请输入用户名:')
        if user.upper()=='Q':
            break
        pwd=input('请输入密码:')
        data='{}-{}\n'.format(user,pwd)
        f.write(data)
    f.close()
    
  • 移动光标位置(字节)

    #移动到指定字节位置
    f.seek(3)
    

    注意:在a模式下,调用write在文件中写入内容时,永远只能将内容写到尾部,不会写到光标的位置

  • 获取当前光标的位置

    f=open('file/info.txt',mode='rb')
    #tell获取当前游标位置
    p1=f.tell()
    print(p1)
    #读三个字节,因为模式为b
    f.read(3)
    p2=f.tell()
    print(p2)
    f.close()
    

5.上下文管理

with上下文管理,可自动关闭文件【建议使用】

#with打开的文件会自动关闭,防止忘记关闭文件
with open('file/info.txt',mode='r',encoding='utf-8') as f:
    data=f.read()
    print(data)

注意:python2.7后,可支持多个文件的上下文进行管理

with open('file/info1.txt',mode='r',encoding='utf-8') as f1,open('file/info2.txt',mode='r',encoding='utf-8') as f2:

6. 对不同字符编码的文件处理

  • 对不同字符编码的文件创建新的文件
  • 统一编码为utf-8
def guess_encoding(file):
    with open(file, 'rb') as f:
        return chardet.detect(f.read())['encoding']

def convert_to_utf8(file_path, output_file_path):
    encoding = guess_encoding(file_path)
    with open(file_path, 'r', encoding=encoding, errors='ignore') as file:
        content = file.read()
    with open(output_file_path, 'w', encoding='utf-8') as output_file:
        output_file.write(content)
for i in range(len(data)):
    try:
        path,name,new_path=data.iloc[i,:]
        os.makedirs(new_path,exist_ok=True)
        old=os.path.join(path,name)
        new=os.path.join(new_path,name)
        convert_to_utf8(old, new)
    except Exception as e:
           continue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼靡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值