• [Python] 文件读写


    在Python中,文件读写是通过open()函数打开的文件对象完成的

    open()函数常用的语法格式

    open(file, mode='r', encoding=None, errors=None)

    参数说明

    file: 必需,文件路径(相对或者绝对路径)

    mode: 可选,文件打开模式

    encoding: 设置字符编码,一般使用utf-8

    errors: 报错处理,表示如果遇到编码错误后如何处理

    mode(文件打开模式)常用参数

    模式描述
    r只读模式(默认模式),文件必须存在,不存在抛出异常
    w只写模式(不可读),不存在则创建,存在则清空内容再写入
    a只追加写模式(不可读),不存在则创建,存在则只追加内容
    rb以二进制读取
    wb以二进制写入
    ab以二进制追加

    读文件

    数据源

    要以读文件的模式打开一个文件对象,需要使用Python内置的open函数,传入文件名(file)和模式(mode)

    file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')

    模式'r'表示读,这样我们就成功地打开了一个文件 

    如果文件不存在,open()函数就会抛出一个IOError错误,并且给出错误码和详细的信息告诉你文件不存在

    1. # 报错,demo1.txt文件并不存在
    2. #FileNotFoundError: [Errno 2] No such file or directory:'C:\\Users\\X2001565\\Desktop\\demo1.txt'
    3. file = open(r'C:\Users\X2001565\Desktop\demo1.txt','r')

    如果文件打开成功,接下来调用read()方法可以一次读取文件的全部内容,结果以字符串的形式返回

    1. file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')
    2. # 'Hello World!!\nMy name is Andy\nWelcome to my blog'
    3. file.read()

    read(n)方法按照字符读取(r模式),按照字节读取(rb模式)

    1. file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')
    2. # 因为mode='r',所以read(n)按字符读取
    3. # 读取7个字符
    4. # 'Hello W'
    5. file.read(7)

    调用readline()可以每次读取一行内容,结果以字符串的形式返回

    1. file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')
    2. file.readline() # 'Hello World!!\n'
    3. file.readline() # 'My name is Andy\n'
    4. file.readline() # 'Welcome to my blog'
    5. file.readline() # ''

    调用readlines()一次读取所有内容并按行返回,返回一个列表,列表中的每个元素是原文件的每一行

    1. file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')
    2. # ['Hello World!!\n', 'My name is Andy\n', 'Welcome to my blog']
    3. file.readlines()

    提示Tips: 如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便 

    1. file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')
    2. for line in file.readlines():
    3. print(line.strip()) # 把末尾的'\n'删掉
    4. file.close()

    上述的输出结果如下所示:

    Hello World!!
    My name is Andy
    Welcome to my blog

    最后一步是调用close()方法关闭文件

    file.close()

    由于文件读写时都有可能产生IOError错误,一旦出错,后面的f.close()就不会调用。所以为了保证无论是否出错都能正确地关闭文件,Python引入with语句来自动帮我们调用close()方法

    1. with open(r'C:\Users\X2001565\Desktop\demo.txt','r') as f:
    2. print(f.read())

    写文件

    写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件

    1. file = open(r'C:\Users\X2001565\Desktop\test.txt', 'w')
    2. file.write('Hello, world!')
    3. file.write('My name is Andy')
    4. file.close()

    可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件

    我们也可以使用with语句自动帮我们调用close()方法

    1. with open(r'C:\Users\X2001565\Desktop\test.txt', 'w') as f:
    2. f.write('Hello, world!')
    3. f.write('My name is Andy')

    没有文件,则创建文件写入内容,如果文件存在,先清空原文件内容,再写入新内容 

    test.txt文件导入的内容如下所示 

    扩展补充知识

    1.实现文件拷贝功能

    数据集

    1. import os
    2. file_name = input('请输入一个文件路径:')
    3. if os.path.isfile(file_name):
    4. old_file = open(file_name, 'rb') # 以二进制的形式读取文件
    5. names = os.path.splitext(file_name)
    6. new_file_name = names[0] + '.bak' + names[1]
    7. new_file = open(new_file_name, 'wb') # 以二进制的形式写入文件
    8. while True:
    9. content = old_file.read(1024) # 读取出来的内容是二进制
    10. new_file.write(content)
    11. if not content:
    12. break
    13. new_file.close()
    14. old_file.close()
    15. else:
    16. print('您输入的文件不存在')

    输入需要拷贝的文件路径

    结果如下所示

    2.CSV文件读写

    CSV文件(Comma-Separated Values),中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。可以把它理解为一个表格,只不过这个表格是以纯文本的形式显示的,单元格与单元格之间,默认使用逗号进行分隔;每行数据之间,使用换行进行分隔。

    数据集

    Python中的csv模块提供了相应的函数,可以让我们很方便的读写csv文件

    CSV文件的读取

    1. import csv
    2. # 以读取方式打开一个csv文件
    3. file = open(r'C:\Users\HP\Desktop\sales.csv', 'r')
    4. # 调用csv模块的reader方法,得到的结果是一个可迭代对象
    5. reader = csv.reader(file)
    6. # 对结果进行遍历,获取到结果里的每一行数据
    7. '''
    8. ['NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales']
    9. ['41.49', '29.02', '3.77', '8.46', '82.74']
    10. ['29.08', '3.58', '6.81', '0.77', '40.24']
    11. ['15.85', '12.88', '3.79', '3.31', '35.82']
    12. ['15.75', '11.01', '3.28', '2.96', '33']
    13. ['11.27', '8.89', '10.22', '1', '31.37']
    14. ['23.2', '2.26', '4.22', '0.58', '30.26']
    15. ['11.38', '9.23', '6.5', '2.9', '30.01']
    16. ['14.03', '9.2', '2.93', '2.85', '29.02']
    17. ['14.59', '7.06', '4.7', '2.26', '28.62']
    18. '''
    19. for row in reader:
    20. print(row)
    21. file.close()

    CSV文件的写入 

    1. import csv
    2. # 以写入方式打开一个csv文件
    3. file = open(r'C:\Users\HP\Desktop\sales.csv','w')
    4. # 调用writer方法,传入csv文件对象,得到的结果是一个CSVWriter对象
    5. writer = csv.writer(file)
    6. # 调用CSVWriter对象的writerow方法,一行行的写入数据
    7. writer.writerow(['NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales'])
    8. # 还可以调用writerows方法,一次性写入多行数据
    9. writer.writerows([['1', '1', '1', '1', '1'],['2', '2', '2', '2', '2'], ['3', '3', '3', '3', '3']])
    10. file.close()

    结果如下所示

  • 相关阅读:
    【python】遵守 robots.txt 规则的数据爬虫程序
    Python的NumPy库(一)基础用法
    如何查看java对象占用内存的信息?
    第02章 Tableau连接数据源
    挑战杯 基于深度学习的水果识别 设计 开题 技术
    【论文整理1】On the Continuity of Rotation Representations in Neural Networks
    图的最短路径问题 详细分解版
    Servlet管理机制问题
    多线程与高并发基础
    快速入门:构建您的第一个 .NET Aspire 应用程序
  • 原文地址:https://blog.csdn.net/Hudas/article/details/127704607