2014-11-02 3 views
0

У меня есть два файла, один содержит список данных, разделенных табуляцией, а второй содержит список идентификаторов элементов, который является одним полем. Я хотел бы сравнить каждое первое поле в более крупном файле (file1) со всеми идентификаторами строк/элементов в наименьшем файле (файл2), а затем, если сравниваемый id не существует во втором файле, я хочу написать всю информацию, связанную с сравниваемый элемент в первом файле (это содержимое линии, разделенное вкладкой). Я попробовал код ниже, но у меня проблема с циклами. Первый цикл не увеличивается, а второй - для всех вторых строк. Кроме того, я хочу, чтобы номер позиции был написан один раз, что является проблемой в выражении If.Сравнение двух текстовых файлов для удаления дубликатов более длинного

for lines in alldata: 
    for lines1 in olddata: 
    old_data=lines1.split('\r\n') 
    dataId=old_data[0] 
    data=lines.split('\t') 
    photoid=data[0] 
    if photoid==dataId: 

    break 

    else: 
    #continue 
    #print('matching',lines) 
    #break 
     w=open(head+'......................../1.txt','a') 
     w.write(lines) 

Это пример структуры файлов:

15463774518 2014-10-28 08:12:31 2014-10-28 13:12:31 
15628560471 2014-10-26 07:40:28 2014-10-26 12:40:28 
15444098878 2014-10-26 04:49:19 2014-10-26 09:49:19 
15437269197 2014-10-25 09:55:11 2014-10-25 15:55:11 

небольшой файл выглядит следующим образом:

139747955 
2417570005 
2478707302 
1808883457 
211514265 
+0

Было бы очень полезно увидеть образец содержимого вашего файла. Кроме того, можете ли вы указать указатель на размер файлов? Достаточно ли они достаточно малы для хранения в памяти? –

+0

Файлы имеют разные размеры, так как я использую другой размер данных, для большого файла мин. размер составляет 50 КБ, а некоторые из файлов - более 5 МБ. файлы меньшего размера - макс. 20 КБ. – Samah

ответ

0

Я предлагаю следующий псевдокод. Питонический способ проверки, если файл id 1 находится в файле id 2, будет иметь список идентификаторов из файла 2 и сказать if id in idlist:.

Предположим, вы прочитали все идентификаторы второго файла в списке idlist_file2. Затем вы читаете файл один. Разберите свою линию и просто проверьте

with open(file1,'r') as f: 
    for line in f: 
     data = parse_line(line) # function according to your data format, either return a dict or a tuple what ever works best for you 
     if date['id'] not in idlist_file2: 
      do_something_with_this_info(data) 

Это должно дать вам хорошую отправную точку.

+0

Спасибо, отлично работает – Samah

0

Я был бы соблазн загрузить второй файл в словарь, то проанализируйте первый файл и попытайтесь сопоставить первый столбец строк со клавишами словаря

keys_dict = {} 
f = open('smallfile.txt','r') 
for line in f.readlines(): 
    keys_dict[line] = 1 
f.close() 

Я не суперпитонист здесь, но вы должны получить эту идею.

Затем, когда вы читаете ваш большой файл, проверьте

if first_column_value in keys_dict:

+0

для сопоставления У меня будет проблема \ r \ n в словаре. – Samah

+0

Вы можете удалить их с помощью string.replace ("\ r \ n", "") или strip ("\ r \ n") – Eric

Смежные вопросы