python讀取與寫入csv,txt格式文件


python讀取與寫入csv,txt格式文件

在數據分析中經常需要從csv格式的文件中存取數據以及將數據寫書到csv文件中。將csv文件中的數據直接讀取為dict類型和DataFrame是非常方便也很省事的一種做法,以下代碼以鳶尾花數據為例。

csv文件讀取為dict

  • 代碼
# -*- coding: utf-8 -*-
import csv
with open('E:/iris.csv') as csvfile:
    reader = csv.DictReader(csvfile, fieldnames=None)   # fieldnames默認為None,如果所讀csv文件沒有表頭,則需要指定
    list_1 = [e for e in reader]  # 每行數據作為一個dict存入鏈表中
csvfile.close()
print list_1[0]
  • 輸出
{'Petal.Length': '1.4', 'Sepal.Length': '5.1', 'Petal.Width': '0.2', 'Sepal.Width': '3.5', 'Species': 'setosa'}

如果讀入的每條數據需要單獨處理且數據量較大,推薦逐條處理然后再放入。

list_1 = list()
for e in reader:
  list_1.append(your_func(e)) # your_func為每條數據的處理函數

多條類型為dict的數據寫入csv文件

  • 代碼
#   數據
data = [
{'Petal.Length': '1.4', 'Sepal.Length': '5.1', 'Petal.Width': '0.2', 'Sepal.Width': '3.5', 'Species': 'setosa'},
{'Petal.Length': '1.4', 'Sepal.Length': '4.9', 'Petal.Width': '0.2', 'Sepal.Width': '3', 'Species': 'setosa'},
{'Petal.Length': '1.3', 'Sepal.Length': '4.7', 'Petal.Width': '0.2', 'Sepal.Width': '3.2', 'Species': 'setosa'},
{'Petal.Length': '1.5', 'Sepal.Length': '4.6', 'Petal.Width': '0.2', 'Sepal.Width': '3.1', 'Species': 'setosa'}
]
#   表頭
header = ['Petal.Length', 'Sepal.Length', 'Petal.Width', 'Sepal.Width', 'Species']
print len(data)
with open('E:/dst.csv', 'wb') as dstfile:   #寫入方式選擇wb,否則有空行
    writer = csv.DictWriter(dstfile, fieldnames=header)
    writer.writeheader()    #   寫入表頭
    writer.writerows(data)  # 批量寫入
dstfile.close()

上述代碼將數據整體寫入csv文件,如果數據量較多且想實時查看寫入了多少數據可以使用writerows函數。

讀取csv文件為DataFrame

  • 代碼
# 讀取csv文件為DataFrame
import pandas as pd
dframe = pd.DataFrame.from_csv('E:/iris.csv')

也可以稍微曲折點:

import csv
import pandas as pd
with open('E:/iris.csv') as csvfile:
    reader = csv.DictReader(csvfile, fieldnames=None)   # fieldnames默認為None,如果所讀csv文件沒有表頭,則需要指定
    list_1 = [e for e in reader]  # 每行數據作為一個dict存入鏈表中
csvfile.close()
dfrme = pd.DataFrame.from_records(list_1)

從zip文件中讀取指定csv文件為DataFrame

dst.zip文件中包含有dst.csv和其它文件,現在在不解壓縮的情況下直接讀取dst.csv文件為DataFrame.

import pandas as pd
import zipfile
z_file = zipfile.ZipFile('E:/dst.zip')
dframe = pd.read_csv(z_file.open('dst.csv'))
z_file.close()
print dframe

DataFrame寫入csv文件

dfrme.to_csv('E:/dst.csv', index=False) # 不要每行的編號

讀取txt文件為DataFrame

import pandas as pd
frame = pd.read_table(path, header=None, index_col=False, delimiter='\t', dtype=str)

frame = pd.read_table(src_path, delimiter='|', header=None, error_bad_lines=False)
  • src_path:txt文件路徑
  • delimiter:字段分隔符
  • header:表頭
  • error_bad_lines: 是否忽略無法讀取的行(文件中部分行由於認為事物造成讀取錯誤)
  • dtype:數據讀入后的存儲類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM