python - पायथन का उपयोग कर एक सीएसवी फ़ाइल संपादित करते समय शीर्षलेख छोड़ें





python-2.7 csv (4)


इसे हल करने का एक और तरीका डिक्ट्रेडर क्लास का उपयोग करना है, जो हेडर पंक्ति को "छोड़ देता है" और अनुक्रमित नामित अनुक्रमित करने के लिए इसका उपयोग करता है।

निम्नानुसार "foo.csv" दिया गया है:

FirstColumn,SecondColumn
asdf,1234
qwer,5678

इस तरह DictReader का उपयोग करें:

import csv
with open('foo.csv') as f:
    reader = csv.DictReader(f, delimiter=',')
    for row in reader:
        print(row['FirstColumn'])  # Access by column header instead of column number
        print(row['SecondColumn'])

मैं पाइथन का उपयोग कर एक सीएसवी संपादित करने के लिए नीचे निर्दिष्ट कोड का उपयोग कर रहा हूँ। संहिता कोड में कोड के ऊपरी हिस्से में बुलाए गए कार्य।

समस्या: मैं नीचे पंक्ति को दूसरी पंक्ति से सीएसवी संपादित करना शुरू करना चाहता हूं, मैं चाहता हूं कि वह शीर्ष पंक्ति को बाहर कर दे जिसमें हेडर शामिल हों। अभी यह केवल 1 पंक्ति पर फ़ंक्शंस लागू कर रहा है और मेरी हेडर पंक्ति बदल रही है।

in_file = open("tmob_notcleaned.csv", "rb")
reader = csv.reader(in_file)
out_file = open("tmob_cleaned.csv", "wb")
writer = csv.writer(out_file)
row = 1
for row in reader:
    row[13] = handle_color(row[10])[1].replace(" - ","").strip()
    row[10] = handle_color(row[10])[0].replace("-","").replace("(","").replace(")","").strip()
    row[14] = handle_gb(row[10])[1].replace("-","").replace(" ","").replace("GB","").strip()
    row[10] = handle_gb(row[10])[0].strip()
    row[9] = handle_oem(row[10])[1].replace("Blackberry","RIM").replace("TMobile","T-Mobile").strip()
    row[15] = handle_addon(row[10])[1].strip()
    row[10] = handle_addon(row[10])[0].replace(" by","").replace("FREE","").strip()
    writer.writerow(row)
in_file.close()    
out_file.close()

मैंने row चर को 1 से प्रारंभ करके इस समस्या को हल करने का प्रयास किया लेकिन यह काम नहीं किया।

कृपया इस मुद्दे को हल करने में मेरी मदद करें।




आपका reader चर एक पुनरावृत्ति है, उस पर लूप करके आप पंक्तियों को पुनर्प्राप्त करते हैं।

इसे अपने लूप से पहले एक आइटम छोड़ने के लिए, बस next(reader, None) कॉल करें और वापसी मान को अनदेखा करें।

आप अपने कोड को थोड़ा सा सरल बना सकते हैं; खोले गए फ़ाइलों को संदर्भ प्रबंधकों के रूप में स्वचालित रूप से बंद करने के लिए उपयोग करें:

with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile:
   reader = csv.reader(infile)
   next(reader, None)  # skip the headers
   writer = csv.writer(outfile)
   for row in reader:
       # process each row
       writer.writerow(row)

# no need to close, the files are closed automatically when you get to this point.

अगर आप आउटपुट फ़ाइल को हेडर लिखना चाहते हैं, तो यह भी आसान है, writer.writerow() को writer.writerow() में आउटपुट पास करें:

headers = next(reader, None)  # returns the headers or `None` if the input is empty
if headers:
    writer.writerow(headers)



row=1 करना कुछ भी नहीं बदलेगा, क्योंकि आप लूप के परिणामों के साथ बस इसे ओवरराइट करेंगे।

आप एक पंक्ति को छोड़ने के लिए next(reader) करना चाहते हैं।




>>> import string
>>> safechars = bytearray(('_-.()' + string.digits + string.ascii_letters).encode())
>>> allchars = bytearray(range(0x100))
>>> deletechars = bytearray(set(allchars) - set(safechars))
>>> filename = u'#ab\xa0c.$%.txt'
>>> safe_filename = filename.encode('ascii', 'ignore').translate(None, deletechars).decode()
>>> safe_filename
'abc..txt'

यह खाली तारों, विशेष फ़ाइल नामों ('नूल', 'con', आदि) को संभाल नहीं करता है।





python python-2.7 csv