2015-09-29 3 views
0

У меня есть два файла tex, которые содержат неравное количество строк и столбцов. Теперь я хочу сравнить список одного файла tex с другим файлом, а если он совпадает, то напечатайте соответствующий номер. Напр. мои два файла выглядит какpython доступ к неравной строке и столбцу

test1.txt  test2.txt 

XCJ2200,  XCJ1945,A,0.1 
XCJ2345,E  XCJ2200,B,0.2 
XCJ2568,F  XCJ2450,C,0.3 
....   XCJ2590,D,0.4 
       XCJ3000,E,0.5 
       .... 

Я хочу, чтобы соответствовать колонку 1 и 2 test1.txt с колонкой 1 и 2 test2.txt и хочет после окончательного вывода

XCJ2200 0.2 
XCJ2345 0.5 
XCJ2568 

До сих пор я написал следующий код, но он не дает ответа, как я хочу:

reader1=csv.reader(open('test1.txt','rb')) 
reader2=csv.reader(open('test2.txt','rb')) 
col1=[];col2=[];Col1=[];Col2=[];Col3=[] 
for row in reader1: 
    col1.append((row[0])) 
    col2.append((row[1])) 
for row in reader2: 
    Col1.append((row[0])) 
    Col2.append((row[1])) 
    Col3.append((row[2])) 
for i in range(len(col1)): 
for j in range(len(Col1)): 
    if Col1[j]==col1[i] or Col2[j]==col2[i]: 
    print col1[i],Col3[j] 
    else: 
    print col1[i] 

Этот код дает мне следующий вывод

XCJ2200 
    XCJ2200 0.2 
    XCJ2200 
    XCJ2200 
    XCJ2200 
    XCJ2345 
    XCJ2345 
    XCJ2345 
    XCJ2345 
    XCJ2345 0.5 
    XCJ2568 
    XCJ2568 
    XCJ2568 
    XCJ2568 
    XCJ2568 

Этот код печатает col 1 из test1.txt в несколько раз длины col 1 файла test2.txt. Я знаю, что что-то не так в последнем состоянии цикла. Пожалуйста, дайте мне знать возможное решение этой проблемы.

+1

Не используйте оператор еще для печати столбец вы не хотите ? – Programmer

+0

Затем он просто распечатает XCJ2200 0.2 XCJ2345 0.5 –

+0

@viralparekh «' XCJ2200 »' и т. Д. Всегда уникален в csv1 или csv2? – KobeJohn

ответ

1

test1.txt

XCJ2200, 
XCJ2345,E 
XCJ2568,F 

test2.txt

XCJ1945,A,0.1 
XCJ2200,B,0.2 
XCJ2450,C,0.3 
XCJ2590,D,0.4 
XCJ3000,E,0.5 

код

import csv 

data1 = list(csv.reader(open('test1.txt','rb'))) 
data2 = list(csv.reader(open('test2.txt','rb'))) 

for d in data1: 
    lookup = [x for x in data2 if any(z in x for z in d)] 
    print '{0} {1}'.format(d[0], lookup[0][2] if lookup else '') 
+0

ваш код не проверяет второе условие, то есть col2 (test1.txt) == Col2 (test1.txt). –

+0

@ viralparekh Вам необходимо предоставить более подробный пример ввода и вывода данных. Мы должны угадать ваши спецификации. Например, вы можете публиковать образцы данных и точный результат, который вы ожидаете от них. – KobeJohn

+0

ах мой плохой. Он должен работать сейчас :) –

0

Ваша спецификация нуждается в некоторых пояснениях, но это может сделать то, что вы ищете. Попробуйте. Я надеюсь, что код может дать вам некоторые идеи о более простых способах написания кода.

import csv 


with open('test1.txt') as f: # this avoids the trouble of remembering to close files 
    data1_ids, data1_letters = zip(*csv.reader(f)) 
with open('test2.txt') as f: 
    data2_ids, data2_letters, data2_numbers = zip(*csv.reader(f)) 


for i, (data1_id, data1_letter) in enumerate(zip(data1_ids, data1_letters)): 
    if (data1_id in data2_ids) or (data1_letter in data2_letters): 
     print('{} {}'.format(data1_id, data2_numbers[i])) 
    else: 
     print(data1_id) 
+0

Этот код также не удовлетворяет второму условию. Я прошу вас посмотреть, какой результат я хочу получить в своем вопросе. Благодарю. –

+0

@ viralparekh Я обновил ответ, но, пожалуйста, проследите за обновлением своего вопроса. – KobeJohn

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