#python #csv
#python #csv
Вопрос:
У меня есть такой список
[[1.75], [4.75]]
[[2.5], [2.5]]
[[3.5], [3.5]]
[[4.0], [4.0]]
Я хочу записать это в файл CSV, например
1.75, 4.75
2.5, 2.5
3.5, 3.5
4.0, 4.0
Когда я попытался использовать writerows
метод csv
модуля, он сохраняется как
1.75
4.75
2.5
2.5
3.5
3.5
4.0
4.0
Комментарии:
1. Почему каждое значение само по себе является списком? Разверните их, чтобы получить
[1.75, 4.75]
…?!2. Предполагая, что вы используете
writerow
свойствоcsv.writer
объекта, и что вы делаетеfor row in your_array:
, вы можете использовать[l[0] for l in row]
в качестве аргументаwriterow
. (На самом деле я вижу, что вы говорите, что делаете,writerows
но, по крайней мере, вы можете выполнятьwriterow
в цикле, даже если вы в данный момент этого не делаете; конечно, можно было бы поместить это в выражение генератора и использоватьwriterows
вместоfor
цикла, но, вероятно, в этом нет большого преимущества.)
Ответ №1:
Вам нужно распаковать каждую строку в плоский список.
import csv
my_list = [
[[1.75], [4.75]],
[[2.5], [2.5]],
[[3.5], [3.5]],
[[4.0], [4.0]],
]
with open("my.csv", "w") as f:
writer = csv.writer(f)
for row in my_list:
writer.writerow([l[0] for l in row])
Или, если предпочтительнее, for
цикл можно заменить выражением генератора, чтобы вы могли использовать его writerows
так, как вы делаете в данный момент:
writer.writerows([l[0] for l in row] for row in my_list)
Комментарии:
1. Что делать, если в списке есть более одного элемента.
2. @user567879 Тогда вместо
[l[0] for l in row]
вы могли бы использовать[i for l in row for i in l]
— это приведет к выравниванию списка списков, даже если в каждом из них более одного элемента.
Ответ №2:
Вот возможное решение:
import csv
lst = [[[1.75], [4.75]],
[[2.5], [2.5]],
[[3.5], [3.5]],
[[4.0], [4.0]]]
with open('file.csv', 'w') as f:
writer = csv.writer(f)
w.writerows([[x[0] for x in lst] for line in lst])
Кроме того, вы можете выровнять свой список с помощью itertools.chain
:
from itertools import chain
...
w.writerows([list(chain(*line)) for line in lst])