2013-11-06 5 views
2

У меня есть список, который имеет значения x long. Список разбивается на подстроки разной длины. Затем я беру эти подсписки и записываю их в выходной файл. Есть ли способ распечатать подсписки без скобок.Python: список подписок, запись подписок без скобок

Ред clarfiy:

Список фактической длиной 300 подсписки с 12250 элементов в нем, и изменения с каждым Senario я бегу. Очевидно, это упрощается. Позвольте мне изменить несколько вещей и посмотреть, не изменит ли это ответы.

т.е.

List=[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11, 12, 15]] 

где выход:

[1, 2, 3] 
[4, 5, 6, 7] 
[8, 9, 10, 11, 12, 15] 

, но я хочу

1, 2, 3 
4, 5, 6, 7 
8, 9, 10, 11, 12, 15 

Я хочу, чтобы этот выход в новую переменную, скажем ListMod, поэтому я могу используйте ListMod в отдельной функции для записи файла. Файл также вызывает 2 других списка: «Время и размер», где «Размер» обозначает длину строки в ListMod.

Сколько это может изменить ваши ответы?

+1

В качестве побочного примечания почти нет веской причины писать 'for i в xrange (len (List)): foo (List [i])'. Просто используйте 'для элемента в List: foo (element)'. – abarnert

ответ

4

Во-первых, ответ:

file.write(','.join(map(repr, List[i])) 

Ваш фактический код не может писать, что вы утверждаете, что, по нескольким причинам:

  • write метод A файла даст вам TypeError если вы дадите ему список, а не распечатайте его. Вы должны позвонить str или repr в список, чтобы получить что-то, что вы можете write.
  • Вызов str или repr в списке помещает пробелы после запятых, а также скобки.
  • У вас есть хотя бы один SyntaxError в коде, который помешал бы вам даже дойти до этого.

Итак, я должен угадать, что вы на самом деле делать, прежде чем я могу объяснить, как это исправить. Может быть, что-то вроде этого:

file.write(str(List[i])) 

Если да, то __str__ метод списка эффективно:

'[' + ', '.join(map(repr, self)) + ']' 

Вы хотите, чтобы это без скобок и без пробелов, так что:

','.join(map(repr, self)) 
2

Ваш формат вывода представляется CSV. Если фактические данные так же просто, как в приведенном примере, то вы можете просто использовать CSV писатель питона:

import csv 
with open('/tmp/myfile.txt', 'w') as f: 
    csv_writer = csv.writer(f) 
    csv_writer.writerows(List) 
+0

@abarnert Хорошо, что вам тяжело угодить. Я добавил объяснение – wim

1

Если вы на 3.x Python или 2.-Вперед и не прочь использовать print как функция:

from __future__ import print_function # ignore if on py 3.x 

for line in List: 
    print(*line, sep=',', file=file) 
0
print '\n'.join(','.join(map(str, x)) for x in List) 
0

Что бы я сделал это это - устанавливает file1 как текст до раскола (мой раскол новой линии, потому что это делает его мне легче читать простой текстовый файл), а затем устанавливает файл2 как текст после раскола. Если бы я был сделать:

print(fd.read().split('\n')[:1]) 

он будет печатать, как это:

['(information)'] 

который не является полезным, когда вы используете информацию в каталоге, как я. Это здесь будет печатать текст без скобок:

fd = open('examplefile.txt', 'r+') 
    print(fd.read().split('\n')[1-1]) 
    fd = open('examplefile.txt', 'r+') 
    print(file2 = fd.read().split('\n')[2-3]) 

Выход:

(information1) 
    (information2) 

Этот сценарий может выглядеть избыточными с повторным открытием и тот же файл в том же режиме, но поверьте мне, это не так. Если вы этого не сделаете, он не распечатает текст после раскола. Позвольте мне показать вам, что происходит, когда вы не делаете этого:

fd = open('examplefile.txt', 'r+') 
    print(fd.read().split('\n')[1-1]) 
    print(file2 = fd.read().split('\n')[2-3]) 

Выход:

(information1) 

Вы можете редактировать этот код для ваших потребностей, это просто, как я сделал свой пример!

Смежные вопросы