У меня есть список, который выглядит как

[["a","b","c","d"],["e","f","g","h"],["i","j","k","l"]]

Как я могу преобразовать этот список списка в текстовый файл, который выглядит как

a  b  c  d
e  f  g  h
i  j  k  l

Это казалось простым, но ни одно из решений в Интернете не казалось достаточно кратким и разъясняющим, чтобы такие манекены, как я, могли это понять.

Спасибо!

5
trenta coollime 22 Фев 2018 в 11:03

6 ответов

Лучший ответ

Публикация только для того, чтобы выделить шаги, которые необходимо предпринять

l = [['a','b','c','d'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]
with open('my_file.txt', 'w') as f:
    for sub_list in l:
        for elem in sub_list:
            f.write(elem + ' ')
        f.write('\n')
4
George Dragan 22 Фев 2018 в 08:20

Еще один лайнер, для удовольствия (не пишите такой код, кстати!)

with open('/tmp/my_file2.txt', 'w') as thefile: thefile.write('\n'.join(' '.join(el for el in l1) for sub in sub))

1
vlad-ardelean 22 Фев 2018 в 09:46

Хвалите силу понимания здесь:

lst = [["a","b","c","d"],["e","f","g","h"],["i","j","k","l"]]

out = "\n".join([" ".join(sublist) for sublist in lst])
print(out)

Это дает

a b c d
e f g h
i j k l

Или дольше, может быть, более понятно:

for sublist in lst:
    line = " ".join(sublist)
    print(line)

.format()
lst = [["a","b","cde","d"],["e","f","g","h"],["i","j","k","l"]]

out = "\n".join(["".join("{:>5}".format(item) for item in sublst) for sublst in lst])
print(out)

Который даст

a    b  cde    d
e    f    g    h
i    j    k    l
6
Jan 24 Фев 2018 в 16:05

Для записи в файл в этом формате вы можете использовать join следующим образом:

array = [['a','b','c','d'],['e','f','g','h'],['i','j','k','l']]

# create a file if not exist and open it
file = open('testfile.txt', 'w')

# for each element in the array
for a in array: 
    # convert each sub list to a string, and write it in the file, note break line '\n'
    file.write(' '.join(a) + '\n') 

# close the file when you finish
file.close()

Результат:

write in a file


Чтобы избежать разрыва строки в конце вы можете использовать:

breakLine = ''
for a in array:
    file.write(breakLine + ' '.join(a))
    # Use break line after the first write
    breakLine = '\n'
file.close()

Результат 2

write in a file

2
YCF_L 22 Фев 2018 в 08:25

Для этого есть CSV.

l = [["a","b","c","d"],["e","f","g","h"],["i","j","k","l"]]

with open("test.csv", 'w', encoding="utf-8", newline="") as f:
    writer = csv.writer(f, delimiter=' ')# or "\t", default is coma.
    writer.writerows(l)
1
Rahul 22 Фев 2018 в 09:11

Вы можете использовать понимание списка с новой строкой:

'\n'.join(' '.join(item) for item in ls)
4
0xc0de 22 Фев 2018 в 08:11