список Python в CSV-файл с каждым элементом в новой строке - PullRequest
0 голосов
/ 29 июня 2018

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

 import sys 
 import os
 import csv

 list= ['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']

 def write_to_csv(list_of_emails):
     with open('emails.csv', 'w', newline='') as csvfile:
         writer = csv.writer(csvfile, delimiter = ',')
         writer.writerows(list_of_emails)

write_to_csv(list)  

Ответы [ 5 ]

0 голосов
/ 29 июня 2018

Вы можете изменить код следующим образом:

import sys 
import os
import csv

listOfLines= [['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']]

def write_to_csv(list_of_emails):
   with open('emails.csv', 'w', newline='') as csvfile:
       writer = csv.writer(csvfile, delimiter = ',')
       writer.writerows(list_of_emails)

write_to_csv(listOfLines)

Функция writer.writerows() берет список списков, в нашем случае [['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']], где каждый подсписок внутри исходного списка обрабатывается как одна строка файла CSV. Вы также не должны использовать зарезервированные ключевые слова, такие как list для имен переменных. list, dict - функции, используемые для создания списков и словарей соответственно. Может быть, в вашем коде он не выдал никакой ошибки, но для сценариев, размер которых превышает текущий фрагмент кода, о котором идет речь, интерпретатор выдает ошибки для того же самого, и такие ошибки становятся труднее отлаживать

0 голосов
/ 29 июня 2018

Если вы просто пишете каждую строку в отдельной строке, вы можете просто сделать это просто и просто написать каждый элемент с помощью \n:

lst= ['name1@domain.com', 'name2@domain.com', 'name3@domain.com']

def write_to_csv(list_of_emails):
    with open('emails.csv', 'w') as csvfile:
        for domain in list_of_emails:
            csvfile.write(domain + '\n')

write_to_csv(lst)

Какие выходы:

name1@domain.com
name2@domain.com
name3@domain.com

Вы также не должны использовать list в качестве имени переменной, так как оно скрывает встроенную функцию list.

0 голосов
/ 29 июня 2018

Вы можете использовать delimiter='\n' с csv.writer.writerow (уведомление, , а не writerows). Кроме того, newline='' не требуется в качестве аргумента для open.

import sys 
import os
import csv

L = ['name1@domain.com', 'name2@domain.com', 'name3@domain.com']

def write_to_csv(list_of_emails):
    with open('emails.csv', 'w') as csvfile:
        writer = csv.writer(csvfile, delimiter='\n')
        writer.writerow(list_of_emails)

write_to_csv(L)
0 голосов
/ 29 июня 2018

Почему бы вам не попробовать сделать это с пандами . Это супер просто. :)

lst = ['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']

Во-первых, импортная упаковка

import pandas

Затем создайте фрейм данных

df = pandas.DataFrame(data={"email": lst})

Затем экспортируйте в csv:)

df.to_csv("./mycsv.csv", sep=',',index=False)

Готово :) дайте мне знать, если этот работает для вас!

0 голосов
/ 29 июня 2018

Вам нужно использовать Writerow

Ex:

import sys 
import os
import csv

l= ['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']

def write_to_csv(list_of_emails):
    with open('emails.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile, delimiter = '\n')
        writer.writerow(list_of_emails)

write_to_csv(l)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...