本文目錄一覽:
- 1、如何用python把list里的數據寫入csv?
- 2、Python怎麼把循環得到的結果按照列依次寫入到一個csv文件中
- 3、python對多個csv文件里提取指定列匯總到一個新生成的csv文件
- 4、利用Python如何將數據寫到CSV文件中
- 5、python 讀取多個csv文件中某一列,並生成一個新csv文件
如何用python把list里的數據寫入csv?
最常用的一種方法,利用pandas包
import pandas as pd#任意的多組列表a = [1,2,3]
b = [4,5,6]
#字典中的key值即為csv中列名dataframe = pd.DataFrame({‘a_name’:a,’b_name’:b})#將DataFrame存儲為csv,index表示是否顯示行名,default=Truedataframe.to_csv(“test.csv”,index=False,sep=’,’)1234567891011
a_name b_name0 1 41 2 52 3 6
同樣pandas也提供簡單的讀csv方法,
import pandas as pddata = pd.read_csv(‘test.csv’)12
會得到一個DataFrame類型的data。
另一種方法用csv包,一行一行寫入
import csv
#python2可以用file替代open
with open(“test.csv”,”w”) as csvfile:
writer = csv.writer(csvfile)
#先寫入columns_name
writer.writerow([“index”,”a_name”,”b_name”])
#寫入多行用writerows
writer.writerows([[0,1,3],[1,2,3],[2,3,4]])12345678910
index a_name b_name0 1 31 2 32 3 41234
讀取csv文件用reader
import csvwith open(“test.csv”,”r”) as csvfile:
reader = csv.reader(csvfile) #這裡不需要readlines
for line in reader:
print line
Python怎麼把循環得到的結果按照列依次寫入到一個csv文件中
我改了一下你的代碼,實測是可以從 a.csv複製到 b.csv中
import csv
def foo():
with open(‘a.csv’, ‘r’) as f:
reader = csv.DictReader(f)
rows = [row for row in reader]
if not rows:
return
with open(‘b.csv’, mode=’w’, newline=”, errors=’ignore’) as f2:
for index, row in enumerate(rows):
if index == 0:
f_csv = csv.DictWriter(f2, fieldnames=list(row.keys()))
f_csv.writeheader()
f_csv.writerow(row)
if __name__ == ‘__main__’:
foo()
python對多個csv文件里提取指定列匯總到一個新生成的csv文件
#!/usr/bin/env python
# coding: utf-8
import os
import re
def parserln(ln, patt):
“””用給定的正則表達式解析行”””
matched = patt.match(ln)
if matched:
return matched.groupdict()
def getdata(filename, parser, callback=None):
“””用指定的解析方法parser解析指定文件,
用callback進行數據加工過的數據列表
“””
with open(filename, ‘rt’) as handle:
return map(
callback,
filter(None, map(parser, handle))
)
def storage(filename, dataserial, spliter=’,’):
“””將數據序列按行存儲到指定文件,
每一序列元素間用指定的字元分割”””
with open(filename, ‘wt’) as handle:
handle.writelines([
“%s\n” % (spliter.join(map(str, item)))
for item in dataserial
])
if __name__ == “__main__”:
patt = re.compile(
r”””^
(?Pmonth\d+),
(?Pamount\d+),
(?Pusage\d+)
\s*$”””,
re.I | re.U | re.X)
datapath = ‘datasource’
# datasource下所有存在”usage.csv”文件的子目錄
subpaths = [
os.path.join(datapath, path)
for path in os.listdir(datapath)
if (os.path.isdir(os.path.join(datapath, path))
and os.path.exists(
os.path.join(datapath, path, “usage.txt”))
)
]
storage(
‘store.csv’,
zip(*map(
lambda path: getdata(
os.path.join(path, “usage.csv”),
# 解析方法為用patt解析行
parser=lambda ln: parserln(ln, patt),
# 數據加工方法是取出”amount”轉成整數
callback=lambda x: int(x[“amount”]),
),
subpaths))
)
$ tail -n 12 datasource/*/*.csv
== datasource/2014/usage.csv ==
1,4234,423
2,3523,432
3,4352,438
4,4792,458
5,4823,834
6,5093,734
7,4743,832
8,5152,859
9,4932,810
10,4993,802
11,4999,810
12,5052,850
== datasource/2015/usage.csv ==
1,5234,423
2,4523,432
3,5352,438
4,5792,458
5,6823,834
6,6093,734
7,6743,832
8,7152,859
9,6932,810
10,6993,802
11,6999,810
12,7052,850
(venv)tim@crunchbang:~/workspace/baidu$
$ cat store.csv
4234,5234
3523,4523
4352,5352
4792,5792
4823,6823
5093,6093
4743,6743
5152,7152
4932,6932
4993,6993
4999,6999
5052,7052
$
利用Python如何將數據寫到CSV文件中
如果你的數據是列表格式,可以使用一個迭代器,將數據寫入文件,同時添加必要的分隔符以構成csv文件
如果數據是字典格式,需要考慮使用換行符或者其他特殊符號來分割每個字典元素(包括鍵和值)。鍵和值可以考慮使用和之前不重複的分隔符進行分割。
這樣就構成了一個csv文件(csv使用分隔符分割值的文件)
操作方法如下:
1,使用讀寫追加的方式打開csv文件。
2,找到csv文件的結尾。
3,在結尾使用和之前csv使用的分割相同的格式進行數據添加。
4,關閉文件
python 讀取多個csv文件中某一列,並生成一個新csv文件
csv文件應該是用逗號分隔得才對,否則怎麼算作是csv文件。樓主你開玩笑吧。否則你這只是一個普通的文本文件。如果是真正的csv文件,我只說一點,python裡面有csv模塊,專門處理csv文件。如果是空格分割應該也可以,建議你,看一下python的csv模塊的API,蠻簡單的代碼,其實如果不用的話自己寫也可以。不是很複雜。代碼片段如下:
def deal_file(file_in, file_out)
with open(file_in, ‘r’) as f_in:
with open(file_out, ‘w’) as f_out:
for line in f_in:
f_out.write(line.split(‘ ‘)[2] + ‘\n’)
之後你可以將所有的輸入文件放到一個列表裡面,進行迭代調用這個函數就可以了。
原創文章,作者:QJNVG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317129.html