मेरे पास कुछ डेटा मैन्युअल रूप से डिजीटल है, लेकिन एक तरह से अव्यवस्थित है, जिस तरह से कभी-कभी कोष्ठक से संख्याएं प्राप्त करना आसान होता है, लेकिन जब वे अकेले होते हैं तो यह मुश्किल होता है। यह पंक्तियों के टन के लिए है, इसलिए इसमें अन्य प्रकार की प्रविष्टियां हो सकती हैं

मैंने केवल संख्याओं को अलग करने या निकालने के कार्य का उपयोग करने की कोशिश की है लेकिन सफल रहा है।

ext = ext['ITEMS'].str.extractall(pat = '(/d{2})')

Description

-1
Orlando Stiven Jaramillo Piza 3 सितंबर 2019, 19:33

1 उत्तर

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

यह मानते हुए कि आप उपरोक्त प्रकार की सामग्री को words.txt नाम की फ़ाइल से पढ़ रहे हैं और words2.txt नाम की फ़ाइल में वांछित आउटपुट लिखना चाहते हैं। यदि मैं आपके साझा स्क्रीनशॉट से आपकी आवश्यकता को सही ढंग से समझता हूं, तो आप कार्य को प्राप्त करने के लिए निम्न कोड का उपयोग कर सकते हैं।

with open("words.txt", "r") as reader, open("words2.txt", "w") as writer:
    index_dict = dict()      # stores the indices as keys and list of ITEMs as value
    obj1 = re.compile(r'^\s*(\d+)\s+(.*)')    # this pattern will match the lines starting with an integer(to ignore the header)
    obj2 = re.compile(r'(\d+)\s*(\(\s*(\d+)\s*\)|-\s*(\d+))?')   # this will match the ITEMs in the format \d+|\d+(\d+)|\d+-\d+
    for line in reader:
        s_obj = obj1.search(line)             
        if s_obj:               # If this line contains the input in the desired format, then go ahead and process it, otherwise ignore
            list_index = int(s_obj.group(1))          
            all = obj2.finditer(s_obj.group(2))    # s_obj.group(2) contains the matched items and their quantity such as 56(5) 57(3)| 56 | 67-45 
            index_items = []                      # this will hold all the items for the current index and their quantities
            for m in all:
                item_quantity = [m.group(1), '1']    # if item is not followed by '()' or '-' assume it's 1
                if m.group(2):                     # If it's followed by '()' or '-' update its count with the number following '(' or '-'
                    item_quantity[1] = m.group(3) if not m.group(4) else m.group(4)
                index_items.append(item_quantity)

            index_dict[list_index] = index_items


    sorted_keys = sorted(index_dict.keys())  # sort the keys as dictionary might not give keys in the ascending order and it's assumed that list indices would be in ascending order
    writer.write("{0: >10} {1: >10} {2: >10}\n".format("LIST", "ITEM", "Q"))
    for index in sorted_keys:
        for val in index_dict[index]:
            output_line = "{0: >10} {1: >10} {2: >10}\n".format(str(index), val[0], val[1])
            writer.write(output_line)

आप अपनी आवश्यकताओं के अनुरूप प्रारूप में स्वरूपण को आउटपुट में संशोधित कर सकते हैं। यहाँ नमूना इनपुट है जिसका मैंने उपयोग किया-

List  ITEM
1    56(5) 57(1)
2    23
3    21-9
4    9(3) 5(4) 89-9

और उपरोक्त कार्यक्रम को चलाने पर संबंधित आउटपुट-

      LIST     ITEM         Q
      1         56          5
      1         57          1
      2         23          1
      3         21          9
      4          9          3
      4          5          4
      4         89          9
0
yabhishek 3 सितंबर 2019, 17:31