[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错误,并且给出错误码和详细的信息告诉你文件不存在

# 报错,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()方法可以一次读取文件的全部内容,结果以字符串的形式返回

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()

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

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

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

file.close()

由于文件读写时都有可能产生IOError错误,一旦出错,后面的f.close()就不会调用。所以为了保证无论是否出错都能正确地关闭文件,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')

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

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

扩展补充知识

1.实现文件拷贝功能

数据集

[Python] 文件读写_第1张图片

[Python] 文件读写_第2张图片

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('您输入的文件不存在')

输入需要拷贝的文件路径

结果如下所示

[Python] 文件读写_第3张图片

[Python] 文件读写_第4张图片

2.CSV文件读写

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

数据集

[Python] 文件读写_第5张图片

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()

结果如下所示

[Python] 文件读写_第6张图片

你可能感兴趣的:(Python,python)