Python文件读取和输出
1. 利用Pandas读取
首先,需要:import pandas as pd
对于各个文件格式,读取的语句分别如下:
- .csv
示例:读取一个csv文件,将数据存于一个名为name的DataFrame.
path="C:/Users/h/Desktop/wordflag.csv"
name=pd.read_csv(path,sep=',',encoding='gbk')
字段 | 含义 |
read_csv | 读一个csv文件 |
sep | 分隔符,默认为"," |
encoding | 编码方式,一般为’gbk’。若无法读取,应将文件另存为UTF-8格式,再按encoding='utf-8’读取 |
- .txt
示例:读取一个txt文件,将数据存于一个名为name的DataFrame.
仍然使用read_csv() 函数。pandas读写csv和txt两种文件的用法一样。
path="C:/Users/h/Desktop/wordflag1.txt"
name=pd.read_csv(path,sep=',',encoding='gbk')
- excel
示例:读取一个xlsx文件,将数据存于一个名为name的DataFrame.
path="C:/Users/h/Desktop/wordflag.xlsx"
df = pd.read_excel(path,sheetname=1)
#读excel表的第2个sheet
字段 | 含义 |
pd.read_excel(path[, sheetname=sheet_index]) | 读excel文件,默认读第一个sheet(sheet_index=0) |
path | 文件后缀可以是xlsx or xls |
sheetname | 表示读第几个sheet,从0开始计数,默认为0. |
也可一次性输入多个sheet,如下:
path="C:/Users/h/Desktop/wordflag.xlsx"
#读第1、2、4个sheet
df = pd.read_excel(path,sheetname=[0,1,3])
df
Out[1]:
OrderedDict([(0, 哈哈哈 嘿嘿嘿
0 哈哈哈 嘿嘿嘿
1 哈哈哈 嘿嘿嘿
2 哈哈哈 嘿嘿嘿
3 哈哈哈 嘿嘿嘿), (1, A B
0 A B
1 A B
2 A B
3 A B), (3, 1 2
0 1 2
1 1 2
2 1 2)])
结果为一个OrderedDict对象,查看df[0]得:第一个sheet的数据组成的DataFrame。
df[0]
Out[2]:
哈哈哈 嘿嘿嘿
0 哈哈哈 嘿嘿嘿
1 哈哈哈 嘿嘿嘿
2 哈哈哈 嘿嘿嘿
3 哈哈哈 嘿嘿嘿
常用读取函数汇总:
函数 | 功能 |
read_csv | 读取文件、URL中带分隔符的数据,默认分隔符为英文逗号"," |
read_table | 读取文件、URL中带分隔符的数据,默认分隔符为制表符"\t" |
read_fwf | 读取固定列宽数据,无分隔符 |
read_clipboard | 读取剪切板数据 |
2. 利用Pandas写出
对于各个文件格式,写出的语句分别如下:
- .csv
path="C:/Users/h/Desktop/wordflag.csv"
name.to_csv(path)
运行后生成一个名为wordflag的csv文件,存储于路径"C:/Users/h/Desktop/“
- .txt
仍然使用 to_csv() 函数。pandas读写csv和txt两种文件的用法一样。
path="C:/Users/h/Desktop/wordflag.txt"
name.to_csv(path)
运行后生成一个名为wordflag的txt文件,存储于路径"C:/Users/h/Desktop/“
- excel
可用pandas函数to_excel将DataFrame数据输出为xlsx或xls文件。
path="C:/Users/h/Desktop/wordflag1.xlsx"
name.to_excel(path)
3. 利用open() 方法读取文件
用read_table函数。
path="C:/Users/h/Desktop/wordflag.txt"
with open(path,'r') as f:
name = pd.read_table(f)
字段 | 含义 |
with | 表示"在…的条件下,执行后续语句" |
open(path[,mode]) as filename | 以mode方式打开path处的文件,并取别名为filename。mode默认为只读(“r”) |
各种mode | |
r | 以只读方式打开文件,从头开始读。 |
r+ | 打开一个文件用于读写,从头开始读。 |
w | 打开一个文件只用于写入。若文件已存在,则删除原内容从头写入。若文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。若文件已存在,则删除原内容从头写入。若文件不存在,创建新文件。 |
a | 打开一个文件用于追加。若文件已存在,则追加内容写入。若文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。若文件已存在,文件打开时会是追加读写模式。若该文件不存在,创建新文件。 |
逐行读取
a=[]
#生成一个空列表
path="C:/Users/h/Desktop/wordflag1.txt"
with open(path) as f:
#打开path处的文件,取别名为f
for i, line in enumerate(f.readlines()):
#穷举文件中读到的行,i为行编号,line为行内容
#f.readlines()为列表格式,列表每一元素为一行
a.append(line)
#在列表a中追加读到的line
f.close()
函数 | 功能 |
enumerate(object) | 穷举所有的组合,其中object为可迭代的对象,如列表 |
readline( ) | 文件的方法,用来读行数据 |
append(data) | 列表、DataFrame均有的方法,追加数据data |
4. 批量读取
较为超前,可等到了解DataFrame和循环体再看。
import pandas as pd
import os
import sys
import csv
#设置maxint,避免数据溢出
maxInt = sys.maxsize
decrement = True
while decrement:
decrement = False
try:
csv.field_size_limit(maxInt)
except OverflowError:
maxInt = int(maxInt/10)
decrement = True
#得到根目录
os.chdir('D:/chukumingxiweek20')
file_chdir=os.getcwd()
#文件名列表
filecsv_list=[]
#遍历根目录下的文件
for root,dirs,files in os.walk(file_chdir):
for file in files:
#选取其中的csv文件
if os.path.splitext(file)[1]=='.csv':
#在文件名列表中追加文件名
filecsv_list.append(file)
#创建一个空DataFrame
data=pd.DataFrame()
for csv in filecsv_list[0:]:
try:
#读取
datatemp=pd.read_csv(csv,sep=None,encoding='utf-8',error_bad_lines=False)
#打印当前读取的文件名
print(csv)
#追加当前文件数据
data=data.append(datatemp)
except TypeError:
pass
continue
下期预告:字符串操作、循环体、条件语句