2013-07-05 9 views
6

पर प्रिंट करें मैं CSV फ़ाइल में हर दूसरी पंक्ति को पढ़ने और इसे एक नई फ़ाइल में प्रिंट करने की कोशिश कर रहा हूं। दुर्भाग्यवश मुझे एक खाली रेखा मिल रही है जिसे मैं हटाने में असमर्थ हूं।प्रत्येक दूसरी पंक्ति पढ़ें और नई फ़ाइल

lines = open('old.csv', "r").readlines()[::2] 
file = open('new.csv', "w") 
n = 0 
for line in lines: 
    n += 1 
    if ((n % 2) == 1): 
      print >> file, line 

कोड मैं है बस n की modolus मूल्य को देखकर अगर इसकी वास्तव में हर दूसरी पंक्ति या नहीं तय करने के लिए उपयोग कर रहा हूँ। मैंने strip() और rstrip() के साथ भी कोशिश की है जो अभी भी रिक्त रेखाएं लेता है।

+0

आप पहले से ही 'रीडलाइन() [:: 2] ' –

उत्तर

11

अपने प्रश्न का उत्तर में, अपने खाली लाइन से आ रही है:

print >> file, line 

स्वचालित रूप से एक नई लाइन आउटपुट print उस तरह का उपयोग करना, या तो sys.stdout.write का उपयोग करें या, न्यू लाइन चरित्र को दबाने के लिए, उदाहरण के लिए उनके पीछे अल्पविराम का उपयोग :

:

print >> file, line, 

वैसे भी, इस समग्र दृष्टिकोण बेहतर तरीका के लिए itertools.islice उपयोग करने के लिए है

और यदि आवश्यक हो, पहले को फ़िल्टर रिक्त लाइनों, तो उस से हर 2 ले ...

non_blanks = (line for line in fin if line.strip()) 
fout.writelines(islice(non_blanks, None, None, 2)) 

अधिक सुविधाजनक और मापांक और इस तरह के साथ के बारे में mucking से लचीला।

1

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

1

एक सिफारिश: थोड़ा अपने कोड को साफ करने के लिए, और जरूरत मैन्युअल रूप से बढ़ाने के लिए और एक काउंटर चर, उपयोग घोषित करने के लिए से छुटकारा पाने के:

की गणना में (line_index, लाइन) के लिए

(पंक्तियां): । ..

संबंधित मुद्दे