我有这样的csv文件(位于同一目录中):
文件1:
Id,Param1,Param2
1,10,12
2,16,18
3,24,28
4,22,26
文件2:
Id,Param1,Param2
1,13,19
2,15,23
3,21,25
我想读取文件并创建嵌套列表,如下所示:
Param1 = [[10, 16, 24, 22], [13, 15, 21]]
Param2 = [[12, 18, 28, 26], [19, 23, 25]]
我尝试过的事情:
for i in range(1,nof+1,1):
with open("File%i.csv" %i, "rb") as f1:
reader = csv.reader(f1)
for row in reader:
Param1.append(row[1])
Param2.append(row[2])
最后:
[Param1[i:i + n] for i in range(0, len(Param1), n)]
[Param2[i:i + n] for i in range(0, len(Param2), n)]
如果我所有文件中的行数相同,则可以正常工作,但事实并非如此。我的文件行数不相等。因此,有人可以帮助我弄清楚如何创建这些拆分。非常感谢。
答案 0 :(得分:1)
您可以使用熊猫吗?
import pandas as pd
dfs = []
nof = 2
for i in range(1, nof+1, 1):
dfs.append(pd.read_csv("File{}.csv".format(i)))
param1_list = [list(df['Param1']) for df in dfs]
param2_list = [list(df['Param2']) for df in dfs]
print(param1_list)
print(param2_list)
答案 1 :(得分:1)
稍微修改了样本输入。
cat file1
1|10|12
2|16|18
3|24|28
4|22|26
cat file2
1|13|19
2|15|23
3|21|25
示例代码
def process(filename):
first_list = []
second_list = []
with open(filename, 'r') as fh:
for line in fh:
line = line.rstrip()
dummy, first_field, second_field = line.split('|')
first_list.append(first_field)
second_list.append(second_field)
return [first_list, second_list]
print (process('file1'))
print (process('file2'))
输出
[['10', '16', '24', '22'], ['12', '18', '28', '26']]
[['13', '15', '21'], ['19', '23', '25']]
答案 2 :(得分:1)
这是使用字典和csv.reader
的一种方法:
from io import StringIO
import csv
file1 = StringIO("""Id Param1 Param2
1 10 12
2 16 18
3 24 28
4 22 26""")
file2 = StringIO("""Id Param1 Param2
1 13 19
2 15 23
3 21 25""")
res = {}
for i, file in enumerate([file1, file2]):
# replace file with open('...', 'r')
with file as fin:
reader = csv.reader(file, delimiter=' ', skipinitialspace=True)
next(reader) # exclude header row
res[i] = {idx: list(map(int, x)) for idx, x in enumerate(zip(*reader))}
Param1 = [res[0][1], res[1][1]]
Param2 = [res[0][2], res[1][2]]
print(Param1, Param2, sep='\n')
[[10, 16, 24, 22], [13, 15, 21]]
[[12, 18, 28, 26], [19, 23, 25]]
答案 3 :(得分:1)
>>> from collections import defaultdict
... from csv import DictReader
...
...
... def solution(filenames):
... result = defaultdict(list)
... for filename in filenames:
... d = defaultdict(list)
... with open(filename, 'r') as f:
... reader = DictReader(f)
... for line in reader:
... for k, v in line.items():
... d[k].append(int(v))
...
... for k, v in d.items():
... result[k].append(v)
... return result
...
>>> result = solution(['file1.csv', 'file2.csv'])
>>> result['Param1']
[[10, 16, 24, 22], [13, 15, 21]]
>>> result['Param2']
[[12, 18, 28, 26], [19, 23, 25]]