Python-2:文件读取和输出

    xiaoxiao2023-10-16  163

    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 xlssheetname表示读第几个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”) 各种moder以只读方式打开文件,从头开始读。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

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

    最新回复(0)