Python(8):文件的IO读写操作(操作普通文件/csv/excel)

一、文件的IO读写操作

1.常用的文件读取标志符

标识含义
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
b可以在上述标识后边加b,表示字节层面,例如‘wb’,可以借助requests模块下载请求图片到本地

举个例子:

假设现在有个1.txt的文件
在这里插入图片描述
我们简单的读取一下

在这里插入图片描述
通常操作文件,我们会使用这种方式,可以不用关闭文件,是Python的一种简洁方式

在这里插入图片描述

2.普通文件的读操作

关于读文件有3种方式,这里说一下区别

方法作用
read1.读取整个文件,将文件内容放到一个字符串变量中。2.如果文件非常大,尤其是大于内存时,无法使用read()方法。3.read()直接读取字节到字符串中,包括了换行符
readline1.readline()方法每次读取一行;返回的是一个字符串对象,保持当前行的内存 2.比readlines慢得多 3.readline() 读取整行,包括行结束符,并作为字符串返回
readlines一次性读取整个文件;自动将文件内容分析成一个行的列表。

二、csv文件的读写操作

1.读取操作

有一个示例文件,内容如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLqWLmO4-1603958602468)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1603957345164.png)]

读取文件

import csv # 使用csv模块

file_path = 'result.csv'

# 读取csv文件
with open(file_path, 'r') as f:
    reader = csv.reader(f, delimiter=',')  # 默认的情况下, 读和写使用逗号做分隔符(delimiter)
    for row in reader:
        print(row)

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-51uPXwkV-1603958602469)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1603957731518.png)]

2.读取时候跳过某一行

import csv
from itertools import islice

with open('2.csv', 'r') as f:
    reader = csv.reader(f)
    for row in islice(reader, 1, None): # 跳过表头的第一行
        print(row)

3.列表方式写入csv文件

这个是通过列表的方式进行写入,如果有标题,需要自己一一对应

import csv

with open('some.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(['1', '1', '1', '1'])
    writer.writerow(['2', '2', '2', '2' ])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvopptqw-1603958602470)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1603958444732.png)]

问题: 发现每写完一行会加入一个空行

解决办法: Python3因此需要加入在open( )中增加一个参数newline=’’

import csv

with open('some.csv', 'w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['1', '1', '1', '1'])
    writer.writerow(['2', '2', '2', '2' ])

在这里插入图片描述
Python2可以把w或者a改成字节存储,可以避免这个问题,这里我封装了一下python2的写入

def write_to_csv(file_path, row, fileheaders):
    with open(file_path, 'ab+') as f:
        f.write(codecs.BOM_UTF8)
        writer = csv.writer(f)
        if not os.path.getsize(file_path):
            writer.writerow(fileheaders)
        writer.writerow(row)
    print(row)

4.字典方式写入csv文件

import csv

data = [
    {'name': '张三', 'age': 15, 'sex': '男'},
    {'name': '李四', 'age': 12, 'sex': '男'},
    {'name': '彪子', 'age': 1, 'sex': '女'},
]

keys = data[0].keys()  # 这里每行key相同,我随便取一行做表头

with open('result.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=keys)

    writer.writeheader()

    # writer.writerows(data) # 按顺序写全部
    writer.writerow(data[0])  # 只写一条

在这里插入图片描述

三、excel的数据操作(非pandas模块)

原文件
在这里插入图片描述

1.读取excel的某个sheet的某一行的某一列

import xlrd

file = 'demo.xlsx'
sheet_name='Sheet1'

work = xlrd.open_workbook(file)
work_sheet = work.sheet_by_name(sheet_name)

print(work_sheet.cell_value(2, 0))  # 读取第3行的第1列

在这里插入图片描述

2.追加数据到新文件

# coding: utf-8 

import xlrd
from xlutils.copy import copy

file = 'demo.xlsx'
sheet_name = 'Sheet1'

work = xlrd.open_workbook(file)
work_sheet = work.sheet_by_name(sheet_name)

# 对数据表格进行复制
new_file = copy(work)
ws = new_file.get_sheet(0)

# 往新表格写数据
ws.write(4, 0, '4')
ws.write(4, 1, 'Danny')

# 保存
new_file_name = 'new_demo.xlsx'
new_file.save(new_file_name)

在这里插入图片描述

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张烫麻辣亮。

谢谢老板支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值