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

下期预告:字符串操作、循环体、条件语句