current position:Home>[Python] File read and write

[Python] File read and write

2022-11-08 08:40:09When camellias bloom.

在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'表示读,So we have successfully opened a file 

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

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

如果文件打开成功,接下来调用read()方法The entire contents of the file can be read at once,结果以字符串的形式返回

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

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

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

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

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

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

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

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

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

for line in file.readlines():
    print(line.strip()) # 把末尾的'\n'删掉

file.close()

The output of the above is shown below:

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

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

file.close()

由于文件读写时都有可能产生IOError错误,一旦出错,后面的f.close()就不会调用.So in order to ensure that the file can be closed correctly regardless of whether there is an error or not,Python引入with语句来自动帮我们调用close()方法

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

写文件

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

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

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

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

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

没有文件,then create a file and write the content,如果文件存在,先清空原文件内容,再写入新内容 

test.txtThe contents of the file import are shown below 

扩展补充知识

1.实现文件拷贝功能

数据集

import os

file_name = input('请输入一个文件路径:')
if os.path.isfile(file_name):
    old_file = open(file_name, 'rb')  # 以二进制的形式读取文件

    names = os.path.splitext(file_name)
    new_file_name = names[0] + '.bak' + names[1]

    new_file = open(new_file_name, 'wb')  # 以二进制的形式写入文件

    while True:
        content = old_file.read(1024)  # 读取出来的内容是二进制
        new_file.write(content)
        if not content:
            break

    new_file.close()
    old_file.close()
else:
    print('您输入的文件不存在')

Enter the path of the file to be copied

结果如下所示

2.CSV文件读写

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

数据集

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

CSV文件的读取

import csv

# 以读取方式打开一个csv文件
file = open(r'C:\Users\HP\Desktop\sales.csv', 'r')

# 调用csv模块的reader方法,得到的结果是一个可迭代对象
reader = csv.reader(file)

# 对结果进行遍历,获取到结果里的每一行数据
'''
['NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales']
['41.49', '29.02', '3.77', '8.46', '82.74']
['29.08', '3.58', '6.81', '0.77', '40.24']
['15.85', '12.88', '3.79', '3.31', '35.82']
['15.75', '11.01', '3.28', '2.96', '33']
['11.27', '8.89', '10.22', '1', '31.37']
['23.2', '2.26', '4.22', '0.58', '30.26']
['11.38', '9.23', '6.5', '2.9', '30.01']
['14.03', '9.2', '2.93', '2.85', '29.02']
['14.59', '7.06', '4.7', '2.26', '28.62']
'''
for row in reader:
    print(row)

file.close()

CSV文件的写入 

import csv

# 以写入方式打开一个csv文件
file = open(r'C:\Users\HP\Desktop\sales.csv','w')

# 调用writer方法,传入csv文件对象,得到的结果是一个CSVWriter对象
writer = csv.writer(file)

# 调用CSVWriter对象的writerow方法,一行行的写入数据
writer.writerow(['NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales'])

# 还可以调用writerows方法,一次性写入多行数据
writer.writerows([['1', '1', '1', '1', '1'],['2', '2', '2', '2', '2'], ['3', '3', '3', '3', '3']])
file.close()

结果如下所示

copyright notice
author[When camellias bloom.],Please bring the original link to reprint, thank you.
https://en.pythonmana.com/2022/312/202211080831099676.html

Random recommended