इसलिए आप सूचियों की एक सूची बनाना चाहते हैं ... हमें एक खाली सूची के साथ शुरुआत करने की आवश्यकता है
list_of_lists = []
अगला, हम फ़ाइल सामग्री पढ़ते हैं, लाइन से लाइन
with open('data') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(',')]
# in alternative, if you need to use the file content as numbers
# inner_list = [int(elt.strip()) for elt in line.split(',')]
list_of_lists.append(inner_list)
एक सामान्य उपयोग का मामला स्तंभ डेटा है, लेकिन हमारी स्टोरेज इकाइयाँ फ़ाइल की पंक्तियाँ हैं, जिन्हें हमने एक-एक करके पढ़ा है, इसलिए आप
अपनी सूचियों की सूची को बदलना चाह सकते हैं । यह निम्नलिखित मुहावरे के साथ किया जा सकता है
by_cols = zip(*list_of_lists)
एक और आम उपयोग प्रत्येक स्तंभ को एक नाम देना है
col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
by_names = {}
for i, col_name in enumerate(col_names):
by_names[col_name] = by_cols[i]
ताकि आप सजातीय डेटा आइटम पर काम कर सकें
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
मैंने जो भी लिखा है, उसमें से अधिकांश csv
को मानक पुस्तकालय से मॉड्यूल का उपयोग करके गति दी जा सकती है । एक और तीसरा पक्ष मॉड्यूल है pandas
, जो आपको एक विशिष्ट डेटा विश्लेषण के अधिकांश पहलुओं को स्वचालित करने देता है (लेकिन कई निर्भरताएं हैं)।
अद्यतन करें जबकि पायथन 2 zip(*list_of_lists)
में सूचियों की एक अलग (ट्रांसपोज़्ड) सूची मिलती है, पायथन 3 में स्थिति बदल गई है और एक ज़िप ऑब्जेक्टzip(*list_of_lists)
लौटाता है जो सबस्क्रिप्टेबल नहीं है।
यदि आपको अनुक्रमित पहुंच की आवश्यकता है तो आप उपयोग कर सकते हैं
by_cols = list(zip(*list_of_lists))
यह आपको पायथन के दोनों संस्करणों की सूची देता है।
दूसरी ओर, यदि आपको अनुक्रमित पहुंच की आवश्यकता नहीं है और आप जो चाहते हैं, वह सिर्फ कॉलम नामों द्वारा अनुक्रमित शब्दकोश बनाने के लिए है, एक ज़िप ऑब्जेक्ट ठीक है ...
file = open('some_data.csv')
names = get_names(next(file))
columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
d = {}
for name, column in zip(names, columns): d[name] = column