本文目录一览:
- 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')
之后你可以将所有的输入文件放到一个列表里面,进行迭代调用这个函数就可以了。