пишу.csv файлы из циклов и списков for
Я новичок в python, но я искал в Stack Overflow, google и CodeAcademy ответ или вдохновение для моей очевидно очень простой проблемы. Я думал, что найти простой пример, где цикл for используется для сохранения каждого взаимодействия, будет легко, но я либо пропустил его, либо у меня нет vocab, чтобы задать правильный вопрос. Поэтому, пожалуйста, не вздыхайте громко перед вашим монитором на этот простой вопрос. Спасибо.
Я хотел бы просто написать csv-файл с каждым повторение двух строк печати на коде ниже в отдельном столбце. таким образом, пример вывода может выглядеть следующим образом:
##################
andy.dat, 8
brett.dat, 9
candice.dat, 11
#################
Код, который у меня есть до сих пор:
import sys
import os.path
image_path = "C:\"
for filename in os.listdir (image_path):
print filename
print len(filename)
Если я попытаюсь сделать
x = filename
Тогда я получаю только последнее взаимодействие цикла, записанное в x. как я могу записать их все в x, используя цикл for? Кроме того, как записать его в виде столбца в csv с результатом печати len(filename) рядом с ним? Спасибо.
4 ответов:
Хотя для этой задачи вам не нужно , я бы воспользовался стандартными библиотечными модулями, когда вы можете, например
csv. Попробуйте что-нибудь вроде этого,import os import csv csvfile = open('outputFileName.csv', 'wb') writer = csv.writer(csvfile) for filename in os.listdir('/'): # or C:\\ if on Windows writer.writerow([filename, len(filename)]) csvfile.close()
Я бы, наверное, изменил это:
for filename in os.listdir (image_path): print filename print len(filename)К чему-то вроде
lines = list() for filename in os.listdir(image_path): lines.append("%s, %d" % (filename, len(filename)))Моя версия создает python
list, затем на каждой итерации цикла for добавляет к нему запись.После того, как вы закончите, вы можете напечатать строки с чем-то вроде:
for line in lines: print(line)В качестве альтернативы можно сначала создать список кортежей в первом цикле, а затем отформатировать выходные данные во втором цикле. Этот подход может выглядеть следующим образом:
lines = list() # Populate list for filename in os.listdir(image_path): lines.append((filename, len(filename)) # Print list for line in lines: print("%s, %d" % (line[0], line[1])) # Or more simply for line in lines: print("%s, %d" % line)Наконец, вы этого не делаете. действительно нужно явно хранить длину имени файла, вы можете просто вычислить ее и отобразить на лету. На самом деле, вам даже не нужно на самом деле создавать список и использовать два цикла.
Ваш код может быть таким же простым, как
import sys, os image_path = "C:\\" for filename in os.listdir(image_path): print("%s, %d" % (filename, len(filename))
import sys import os image_path = "C:\\" output = file("output.csv", "a") for filename in os.listdir (image_path): ouput.write("%s,%d" % (filename, len(filename)))Где
aвfileконструктор открывает файл для добавления, вы можете прочитать больше о различных режимах, в которых вы можете использоватьfileОбъект здесь.
Попробуйте вот что:
# Part 1 import csv import os # Part 2 image_path = "C:\\" # Part 3 li = [] # empty list for filename in os.listdir(image_path): li.append((filename, len(filename))) # populating the list # Part 4 with open('test.csv', 'w') as f: f.truncate() writer = csv.writer(f) writer.writerows(li)Пояснение:
В Части 1,
импортируем модулиosиcsv.
В Части 2,
мы объявляемimage_path.Теперь петли
for..
В Части 3,
мы объявляем пустой список (li).
Затем мы переходим в цикл for, в котором мы заполняем список каждым элементом и его длиной вimage_path. В Части 4,
мы переходим к записи csv-файла. В заявлении С мы написали все данные изli, в наш файл.
Comments