मेरे पास एक .txt फ़ाइल में एक टेक्स्ट है और कुछ पैराग्राफ हैं, और आप इस संरचना को देख सकते हैं:

name:zzzz,surnames:zzzz,id:zzzz,country:zzzz ...
name:zzzz,surnames:zzzz,id:zzzz,country:zzzz ...
name:zzzz,surnames:zzzz,id:zzzz,country:zzzz ...
name:zzzz,surnames:zzzz,id:zzzz,country:zzzz ...

और मुझे पता होगा कि सभी 'आईडी' की तुलना कैसे की जाती है और यदि एक ही आईडी वाले पैराग्राफ हैं, तो उनमें से एक को हटा दें। कुछ विचार? धन्यवाद।

मुझे पहले ही पहली आईडी मिल गई है: /

0
Marta 3 अप्रैल 2018, 20:00

3 जवाब

सबसे बढ़िया उत्तर

फ़ाइल पथ को पैरामीटर के रूप में उपयोग करके आप प्रत्येक पंक्ति के लिए आईडी का चयन कर सकते हैं और इसे एक निर्देश पर सहेज सकते हैं।

import re
import sys

ref = dict()
with open(sys.argv[1], 'r') as f:
    for line in f.readlines():
       m = re.search(".*id:(\w*),", line)
       if m is not None and m.group(1) is not None:
           ref[m.group(1)] = line.strip()

for i in ref:
    print(ref[i])
1
Mateus Milanez 3 अप्रैल 2018, 17:39

इसे आज़माएं, आईडी का एक निर्देश बनाएं जैसा कि आप टेक्स्ट फ़ाइल के माध्यम से पार्स करते हैं ताकि यह पता चल सके कि किस आईडी को शामिल किया गया है। जैसे ही आप पार्स करते हैं, केवल अनन्य आईडी के साथ एक नई टेक्स्ट फ़ाइल लिखें।

file = open("file.txt","r")
file_new = open("file_new.txt","w")
id_list = {}    

for line in file:
     #third value of the line is the id
     id = line.split(",")[2]

     #if id is new, we add its corresponding line to the new file and record
     if id not in id_list:
         id_list[id] = True
         file_new.write(line)
1
Justin C. 3 अप्रैल 2018, 17:45

सबसे पहले, मुझे लगता है कि आपका डेटा इस तरह दिखता है।

name:z,surnames:zz,id:zzz,country:zzzz
name:y,surnames:yy,id:yyy,country:yyyy
name:x,surnames:xx,id:xxx,country:xxxx
name:z,surnames:zz,id:zzz,country:zzzz

मेरा सुझाव है कि आप pandas पैकेज और उसके read_csv फ़ंक्शन का उपयोग करें। यह आपको एक DataFrame वस्तु दे सकता है, जो डेटा तालिका से निपटने के लिए सुविधाजनक है।

import pandas as pd
df = pd.read_csv(your_file_here, header=None, names=['name', 'surnames', 'id', 'country'])  # I am assuming you don't have header
temp = df[df.name == 'name:z'].iloc[0]  # save the first row with name:z
df_new = df[df.name != 'name:z']  # drop all rows with name z
df_new = df_new.append(temp)  # append the first row back
df_new.to_csv(new_file_name)  # if you want to save
1
idchiang 3 अप्रैल 2018, 17:30