本文目录一览:
- 如何用python把list里的数据写入csv?
- Python怎么把循环得到的结果按照列依次写入到一个csv文件中
- python对多个csv文件里提取指定列汇总到一个新生成的csv文件
- 利用Python如何将数据写到CSV文件中
- 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=True
dataframe.to_csv("test.csv", index=False, sep=',')
输出结果如下:
a_name b_name
0 1 4
1 2 5
2 3 6
同样pandas也提供简单的读csv方法:
import pandas as pd
data = pd.read_csv('test.csv')
会得到一个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]])
输出结果如下:
index a_name b_name
0 1 3
1 2 3
2 3 4
读取csv文件用reader:
import csv
with 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"""^
(?P<month>\d+),
(?P<amount>\d+),
(?P<usage>\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))
)
输出结果如下:
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使用分隔符分割值的文件) 操作方法如下:
- 使用读写追加的方式打开csv文件。
- 找到csv文件的结尾。
- 在结尾使用和之前csv使用的分割相同的格式进行数据添加。
- 关闭文件
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')
之后你可以将所有的输入文件放到一个列表里面,进行迭代调用这个函数就可以了。