пишу.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) рядом с ним? Спасибо.

613   4  

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

    Ничего не найдено.