मैं अजगर में एक फ़ंक्शन लिखने की कोशिश कर रहा हूं, जो सीएसवी फाइलों को पढ़ता है और उन्हें अच्छी तरह से स्वरूपित करता है। इनपुट फाइलें सिर्फ मानक सीएसवी फाइलें हैं। जहां प्रत्येक पंक्ति एक व्यक्ति का प्रतिनिधित्व करती है। आउटपुट स्वरूप इस तरह दिखना चाहिए:

[
    ("Age", "Gender", "Weight (kg)", "Height (cm)"),
    ("28", "Female", "58", "168"),
    ("33", "Male", "", "188")
]

बात सिर्फ यह नहीं है कि मैं यह कैसे कर सकता हूं। मुझे पता है कि मैं सूचियों की अपनी सूची में प्रत्येक तत्व के माध्यम से लूप कर सकता हूं और इसे प्रिंट कर सकता हूं, लेकिन मैं उन्हें ऊपर के रूप में वापस करना चाहता हूं। एकमात्र प्रारूप जिसे मैं समाप्त करने का प्रबंधन करता हूं वह दिखता है:

[('Age', 'Gender', 'Weight (kg)', 'Height (cm)'), ('28', 'Female', '58', '168'), ('33', 'Male', '', '188')]

अगर किसी को मेरा कोड देखने की ज़रूरत है (मुझे लगता है कि यह बिल्कुल अच्छी तरह से कोडित नहीं है लेकिन मैं सीख रहा हूं):

def read_csv(path):
    newlist = []
    with open("example.csv", "r") as f:
        nr_of_lines = 0
        for line in f.readlines():
            counter = 0
            nr_of_lines += 1
            while "," in line:   
                idx = line.find(",")
                entry = line[0:idx]
                newlist.append(entry)
                line = line[idx+1:]
                counter += 1
                if "," not in line: 
                    idx2 = line.find("\n")
                    newlist.append(line[:idx2])

    nr_elements_per_line = int(len(newlist)/nr_of_lines)
    tuple_list = []
    for i in range(nr_of_lines):
        tuple_list.append(tuple(newlist[nr_elements_per_line*i:nr_elements_per_line+i*nr_elements_per_line]))
        
    return tuple_list
print(read_csv("example.csv"))
2
cactus_splines 25 अक्टूबर 2020, 21:57

3 जवाब

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

आप थोड़ी बेहतर छपाई के लिए pprint मॉड्यूल का उपयोग कर सकते हैं, या सभी को स्वयं प्रिंट कर सकते हैं:

data = [('Age', 'Gender', 'Weight (kg)', 'Height (cm)'), 
        ('28', 'Female', '58', '168'), 
        ('33', 'Male', '', '188')]

print('[')
for inner in data:
    print(f"\t{inner}")
print(']')

आउटपुट:

[
    ('Age', 'Gender', 'Weight (kg)', 'Height (cm)')
    ('28', 'Female', '58', '168')
    ('33', 'Male', '', '188')
]

pprint के साथ:

from pprint import pprint

pprint(data) 

आउटपुट:

[('Age', 'Gender', 'Weight (kg)', 'Height (cm)'),
 ('28', 'Female', '58', '168'),
 ('33', 'Male', '', '188')]
2
Patrick Artner 25 अक्टूबर 2020, 22:02

जैसा कि ऊपर दिखाया गया है, आप pprint का उपयोग कर सकते हैं। एक बहुत अच्छा पुस्तकालय है जिसे सारणी कहा जाता है जिसका उपयोग सारणीबद्ध डेटा प्रदर्शित करने के लिए किया जा सकता है जैसा कि नीचे दिखाया गया है।

>>> from tabulate import tabulate
>>> data = [('Age', 'Gender', 'Weight (kg)', 'Height (cm)'), ('28', 'Female', '58', '168'), ('33', 'Male', '', '188')]
>>> print(tabulate(data[1:], headers=data[0]))
  Age  Gender    Weight (kg)      Height (cm)
-----  --------  -------------  -------------
   28  Female    58                       168
   33  Male                               188
>>>
2
Sagi 25 अक्टूबर 2020, 22:10

स्ट्रिंग्स के आरईपीआर (प्रतिनिधित्व) लिखते समय पायथन सिंगल कोट्स का समर्थन करता है। लेकिन आप बिना उद्धरणों के स्ट्रिंग उत्सर्जित करके और उन्हें स्वयं लपेटकर अपना खुद का लिख ​​​​सकते हैं।

def my_pformat(table):
    tupstr = [", ".join(f'"{s}"' for s in tup) for tup in table]
    tupline = [f"    ({tup})" for tup in tupstr]
    return "\n".join(["["] + tupline + ["]"])

table = [('Age', 'Gender', 'Weight (kg)', 'Height (cm)'), 
        ('28', 'Female', '58', '168'), 
        ('33', 'Male', '', '188')]

print(my_pformat(table))

नतीजा

[
    ("Age", "Gender", "Weight (kg)", "Height (cm)")
    ("28", "Female", "58", "168")
    ("33", "Male", "", "188")
]
1
tdelaney 25 अक्टूबर 2020, 22:24