как предотвратить разбиение элементов списка на отдельные строки при записи в CSV?

При записи в мой CSV мой элемент списка разбивается на отдельные строки, даже если я использую функцию append. Я думаю, проблема в том , как я использую writerow, но я не совсем уверен.

Это мой код.

twitter = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

input_path = 'doc_list.csv'
output_path = 'doc_tweets.csv'

docs_array = []

with open(input_path, 'r') as doc_file:
    docs = csv.reader(doc_file)
    for row in docs:
        docs_array.append(row)

with open(output_path, 'w') as tweets_file:
    writer = csv.writer(tweets_file, quoting=csv.QUOTE_MINIMAL, lineterminator='n')
    for name in docs_array:
        tweet_list = []
        user_timeline = twitter.get_user_timeline(screen_name=name, count=100, include_retweets=False)
        for tweet in user_timeline:
            tweet_list.append(tweet['text'])
        for li in tweet_list:
            writer.writerow(li)
        del tweet_list[:]

del docs_array[:]

Пример того, что находится в списке перед итерацией для writerow

, ‘@etritabaugh великолепный’,

После прохождения через писателя.writerow (li) становится

@,e,t,r,i,t,a,b,A,u,g,h,, g, o, r, g, e, o, u, s

1 ответ

  1. writerow ожидает итерацию, и как только она получает строку, каждый символ в строке разбивается на отдельные столбцы.

    Чтобы записать весь список в виде одной строки в csv, вам не понадобится второй цикл for:

    for tweet in user_timeline:
         tweet_list.append(tweet['text'])
    writer.writerow(tweet_list)
    

    Если вместо этого вы хотите записать каждый элемент в списке как отдельную строку, то используйте литерал списка, который предотвратит использование строки в качестве строки:

    for tweet in user_timeline:
         tweet_list.append(tweet['text'])
    for li in tweet_list:
         writer.writerow([li])
    #                    ^  ^