У меня есть два файла .csv
, связанный с данными из Twitter. У одного есть текст твитов, у другого - идентификаторы этих твитов. Файл с идентификаторами - это совокупность, из которой отбираются твиты в другом файле. Я пытаюсь написать сценарий для чтения текста, поиска другого файла для соответствующего идентификатора, а затем написать новый файл .csv
, в котором есть как идентификатор, так и текст для твитов в меньшем экземпляре.Работа с CSV: чтение и запись данных в правильном порядке
Вот что я до сих пор:
import csv
# creates empty dictionary in which to store tweetIDs and tweet text
originals_data = {}
# declares an empty list to hold tweet text from coded datafile
# will be used to compare against the dictionary created earlier
coded_data = []
coded_all = [] # for all, not just text
# list to hold the IDs belonging to coded tweets for the round
tweet_IDs_for_coded = []
with open('first20.csv', 'rt') as round_in, open('gg_originals.csv', 'rt') as original_in:
# reader object for gg_originals
readOrigin = csv.reader(original_in, delimiter=',')
# adds values from .csv file into the dictionary
for row in readOrigin:
originals_data[row[0]] = row[1]
# reader object for round_x data
readRound = csv.reader(round_in, delimiter=",")
# appends the tweet text to a list
for row in readRound:
coded_data.append(row[0])
# iterates over id:text dictionary
for tweet_id in originals_data:
# iterates over coded_data
for tweet in coded_data:
# When tweet in list matches text in dict, sends key to list
if tweet == originals_data[tweet_id]:
tweet_IDs_for_coded.append(tweet_id)
with open('first20.csv', 'rt') as round_in, open('test2.csv', 'wt') as output:
# reader object for round_x data
readRound = csv.reader(round_in, delimiter=",")
# creates writer object to write new csv file with IDs
writeNew = csv.writer(output, delimiter=",")
# list that holds everything that's going into the csv file
everything = []
# sets row to equal a single row from round data
row = next(readRound)
row.insert(0, 'ID')
# appends ID and then all existing data to list of rows
everything.append(row)
for i, row in enumerate(readRound):
everything.append([str(tweet_IDs_for_coded[i])] + row)
writeNew.writerows(everything)
Данные для файла населения (gg_originals.csv) выглядит примерно так:
tweet_id_str,text
534974890168700930,abcd
534267820071084033,abce
539572102441877504,abcf
539973576108294145,abcg
529278820876943361,abch
529583601244176384,abci
535172191743397888,abcj
532195210059874304,abck
537812033895669760,abcl
,
,
Текстовый только файл, который является подмножеством населения будет выглядеть так:
text
abcl
abci
abcd
Что я до сих пор работает, похоже, rrect IDs, и даже записывает их в новый столбец в новом файле .csv
. Однако идентификаторы в новом файле находятся не в правильных строках - они отображаются в строках для текста, который им фактически не соответствует, что плохо!
Новый файл должен выглядеть примерно так:
ID,text
537812033895669760,abcl
529583601244176384,abci
534974890168700930,abcd
Вместо этого, он заканчивает так:
ID,text
529583601244176384,abcl
537812033895669760,abci
534974890168700930,abcd
правильные идентификаторы были расположены, но они были написаны к неправильным строкам.
Просьба также разместить образец данных. (из обоих файлов) – Saleem
Было бы полезно включить примеры ввода, то, что вы * на самом деле получаете в качестве вывода и что вы ожидаете *. См. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). И добро пожаловать в StackOverflow! –
Я думаю, что вы плохо злоупотребляете своим словарем, но образец данных будет полезен. Вам нужно только перебирать 'coded_data', а затем делать' tweet_IDs_for_coded.append (coded_data [tweet]) 'на каждой итерации (возможно, каким-то образом обрабатывать исключение, если оно не найдено в словаре). Но я думаю, что вам нужен твит, как диктофон, а не идентификатор? Для получения дополнительной помощи потребуются примеры данных. – roganjosh