文章目录
- 文件的介绍
- 文件的理解
- 文件操作基本知识
- 文件对象属性与常用方法
- 文件的读取
- 文件的写入
- **上下文管理语句 with**
- **读CSV文件**
- 二维数据的存储
- 从CSV格式的文件中读取数据
- 将数据写入CSV格式的文件
- 读取Excel格式数据文件(pandas库)
- 读取Excel格式数据文件(pandas库)
文件的介绍
为了长期保存数据以便重复使用,修改和共享,必须将数据以文件地形式存储到外部存储介质(如磁盘,U盘或云盘,网盘,快盘)中
文件操作在各类应用软件开发中均占有重要的地位:
- 管理信息系统时是使用数据源库来存储数据但,而数据库最终还是要以文件的形式存储到硬盘或者其他存储介质中
- 应用信息的配置信息往往也是用文件来存储的,图形,图像,音频,视频,可执行文件等等也是以文件的形式存储在磁盘上的。
文件的理解
文件是数据的抽象和集合
- 文件是存储在辅助存储器上的数据序列
- 文件时数据存储的一种形式
- 文件展现形态:文本文件和二进制文件
- 二进制文件和文本文件最主要的区别在于是否有统一的字符编码
- 二进制文件直接由比特0和比特1组成,没有统一字符编码
- 文件内部数据的组织格式与文件用途有关。
文本文件:由单一特定编码组成的文件,如UTF-8编码
由于存在编码,也被看成是存储着长字符串
适用于: .txt文件 ,.py文件等
二进制文件 适用于 .png .avi等
文件操作基本知识
无论是文本文件还是二进制文件,其操作流程基本都是一致的,首先打开文件任何创建对象,任何通过该对象对文件内容进行读取,写入,删除,修改等操作,最后关闭并保存文件内容。
文件对象属性与常用方法
close(),flush(),read([size]) ,readline(),readlines(),seek(offset[whence]),tell()[返回文件指针当前的位置]
write(s),writelines(s)
文件的读取
f.read(size) 读入全部内容,如果给出参数,读入前size长度
s = f.read(2) # 中国
f.readline(size=-1) 读入一行内容如果给出参数,读入该行前size长度
s = f.readline()
中国是一个伟大的国家!
f.readlines(hint=-1) 读入所有行,以行为元素形成列表,如果给出参数则读取前hint行
s = f.readlines()
[‘中国是一个伟大的国家!’]
文件的逐行操作
逐行遍历文件:方法一
fname = input('请输入要打开的文件的名称')
fo = open(fname,'r')
for line in fo.readlines(): print(line)
fo.close()
# 一次读入,分行处理
方法二:
fname = input('请输入要打开的文件的名称')
fo = open(fname,"r")
for line in fo:print(line)
fo.close()
# 分行读入,逐行处理
文本内容:
静夜思
作者:李白床前明月光,疑是地上霜。
举头望明月,低头思故乡。
假如你直接这样写:
fname = input('Enter file name: ')
f = open(fname,'r')
for line in f.readlines():print(line)
f.close()
会报错:
所以我们要指定解码格式
fname = input('Enter file name: ')
f = open(fname,'r',encoding='utf-8')
for line in f.readlines():print(line)
f.close()
fname = input('Enter file name: ')
f = open(fname,'r',encoding='utf-8')
for line in f:print(line)
f.close()
文件的写入
f.write(s): 向文件写入一个字符串或字节流
f.write(“中国是一个伟大的国家!”)
f.writelines(lines) 将一个元素全为字符串的列表写入文件
ls = [‘中国’,‘法国’,‘美国’]
f.writelines(ls) ⇒ 中国法国美国
f.seek(offset) 改变当前文件操作指针的位置,offset含义如下,0-文件开头,1-当前位置,2-文件结尾
f.seek(0) # 回到文件开头
# w+有读写权限,打开文件后会对文件原有内容进行清空
fo = open('output.txt','w+')
ls = ['中国','法国','美国']
fo.writelines(ls) # 写入一个字符串列表
for line in fo:print(line)
fo.close()
fo = open('output.txt','w+')
ls = ['中国','法国','美国']
fo.writelines(ls)
fo.seek(0)
for line in fo:print(line) # 对比上面那段代,这段代码是会输出内容的 因为文件操作指针被置为开头
fo.close()
上下文管理语句 with
上下文管理语句with,可以自动管理资源,不论因为什么原因(哪怕是代码引发了异常),跳出with块,总能保证文件被正确关闭
,并且在代码块执行完毕后自动还原进入该代码块时的上下文,常用于文件操作,数据库连接,网络连接,多线程和多进程同步时的锁对象管理等场合
with open(filename,mode,encoding) as fp:
这里写通过文件对象fp读写文件内容的语句
上下文管理语句with 还支持下面的用法:
with open(‘test.txt’,‘r’) as src,open(‘test_new.txt’,‘w’) as dst:
dst.write(src.read())
读CSV文件
CSV: Comma-Separated Values
逗号分隔值:一种数据文件格式,用逗号分隔不同的值,通常用于表格数据的存储和交换。
- 国际通用的一二维数组数据1存储格式,一般.csv扩展名
- 每行一个一维数据,采用逗号分隔,无空行
- Excel和一般编辑软件都可以读入或另存为csv文件
二维数据的存储
按行存?按列存?
按行存或者按列存都可以,具体由程序决定
一般索引习惯: ls[row][column] ,先行后列
根据一般习惯,外层列表每个元素都是一行,按行存
从CSV格式的文件中读取数据
fo = open(fname)
ls = []
for line in fo:line = line.replace("\n","")ls.append(line.split(","))
fo.close()
将数据写入CSV格式的文件
ls = [[],[],[]] # 二维列表
f = open(fname,'w')
for item in ls:f.write(','.join(item)+'\n')
f.close()
读取Excel格式数据文件(pandas库)
- pandas(Python Data Analysis Library) 是Python第三方库
主要数据结构
- Series,带标签的一维数组;
- DataFrame,带标签且大小可变的二维表格结构
import pandas as pd
pd.read_csv(filepath,header)
参数:
filepath_or_buffer: 可以是txt文件,可以直接写入"文件名.csv"
header: 将行号用作列名,且是数据的开头.
header=None 即指定原始文件数据没有列索引,这样read_csv将为其自动加上列索引(从0开始)
header=0 表示文件第0行(即第一行,索引从0开始) 为列索引
header=0,并指定新的索引的名字names=seq序列
df = pd.read_csv(“ceshi.csv”,header=0,names=range(2,6))
df = pd.read_csv(csv_file,encoding=“utf-8”) 设置读取时的编码或encoding=“gbk”
写入:
df = pd.read_csv(“…”)
df.to_csv(“…”)
读取Excel格式数据文件(pandas库)
使用pandas的read_excel()方法,可以通过文件路径直接读取.注意到,在一个excel文件中有多个sheet,因此建议一次只读取一个sheet
当读取到一个sheet时,返回的是DataFrame类型
(1) 不指定sheet参数,默认读取第一个sheet
df=pd.read_excel(“data_test.xlsx”)
(2) 指定sheet名称读取
df=pd.read_excel(“data_test.xlsx”,sheet_name=“test1”)
(3) 指定sheet索引号读取
df=pd.read_excel(“data_test.xlsx”,sheet_name=0)
同时去读多个,以字典形式返回(不推荐)
df=pd.read_excel(“data_test.xlsx”,sheet_name=[“test1”,“test2”])
指定多个索引号
df=pd.read_excel(“data_test.xlsx”,sheet_name=[0,1])