2012-02-19 12 views
27

यह मेरी समस्या है।पायथन स्ट्रिप n

मैं एक टेक्स्ट फ़ाइल पढ़ने की कोशिश कर रहा हूं और फिर लाइनों को फ्लोट में परिवर्तित कर रहा हूं। पाठ फ़ाइल में \n और \t है, हालांकि मुझे नहीं पता कि इससे कैसे छुटकारा पाना है।

मैंने line.strip() का उपयोग करने की कोशिश की लेकिन यह इसे बंद नहीं किया और जब मैं सामान को फ्लोट में परिवर्तित करना चाहता था तो मुझे एक त्रुटि मिली। मैंने फिर line.strip("\n") की कोशिश की लेकिन यह भी काम नहीं किया। जब मैं पाठ फ़ाइल से \t और \n निकालता हूं, तो यह मेरा काम ठीक काम करता है, लेकिन यह उनके साथ काम करने के लिए असाइनमेंट का हिस्सा है।

मुझे सच में नहीं पता कि यह क्यों काम नहीं कर रहा है। किसी भी मदद के लिए धन्यवाद।

+6

आप अपनी पाठ फ़ाइल का एक अंश प्रदान कर सकते हैं? – Josh

+2

पट्टी केवल एक लाइन की शुरुआत और अंत से व्हाइटस्पेस को हटा देती है। आप लाइन के बीच में टैब हैं, तो वह उन को नहीं निकालेगा। – Swiss

+2

यह ध्यान देने योग्य है कि "\ n" सभी प्रणालियों पर रिटर्न कैरेक्टर नहीं है। आपको "\ n", "\ r", या "\ r \ n" स्ट्रिप करने की आवश्यकता हो सकती है। यदि आप कुछ पूर्ण कोड दिखाते हैं तो आपने कोशिश की और इनपुट डेटा, यह हल करना आसान हो सकता है। –

उत्तर

1

पायथन सीएसवी लाइब्रेरी इसके लिए अच्छा है।

http://docs.python.org/library/csv.html

सीएसवी = अल्पविराम द्वारा अलग मान, लेकिन अगर आप सीमांकक = \ t निर्धारित करते हैं, तो यह टैब सपरेटेड वैल्यू के लिए भी काम करता है।

62

आपको line.strip('\n') और line.strip('\t') का उपयोग करने में सक्षम होना चाहिए। लेकिन ये line वैरिएबल को संशोधित नहीं करते हैं ... वे सिर्फ \n और \t स्ट्रिप के साथ स्ट्रिंग को वापस कर देते हैं। तो आपको

line = line.strip('\n') 
line = line.strip('\t') 

कुछ ऐसा करना होगा जो शुरुआत और अंत से हटाने के लिए काम करना चाहिए। आप स्ट्रिंग के बीच में \n और \t है, तो आप

line = line.replace('\n','') 
line = line.replace('\t','') 

\n और \t शून्य साथ बदलने के लिए क्या करने की जरूरत।

0

अक्सर, जिस तरह से आप लाइनों को पढ़ने के आधार पर, क्रम में, myline से \ N से छुटकारा पाने के ले जा सकते हैं myline [: - 1] के बाद से \ N myline का अंतिम वर्ण है।

) '\ t' आप का उपयोग जगह ले सकता है (या पट्टी()

1

के लिए आप टैब वर्ण द्वारा अलग तैरता की तर्ज परिवर्तित करने के लिए प्रयास कर रहे हैं, तो बस float(line) में पूरी लाइन में परिवर्तित करने की कोशिश करेंगे एक फ्लोट, जो एक से अधिक होने पर विफल हो जाएगा। अग्रणी और पिछली सफेद जगह से छुटकारा पाने के लिए strip का उपयोग करना उस मौलिक समस्या की सहायता नहीं करेगा।

शायद आपको split प्रत्येक पंक्ति को टुकड़ों में करने और प्रत्येक टुकड़े के साथ कुछ करने की आवश्यकता है?

2

एक पायथन regex पैटर्न का उपयोग करने के बारे में कैसे?

import re 
f = open('test.txt', 'r') 
strings = re.findall(r"\S+", f.read()) 

और क्योंकि अजगर को हटा केवल प्रमुख और अनुगामी पात्रों

Python Docs से line.strip() के अपने मामले के लिए काम नहीं करेगा - साथ अग्रणी और अनुगामी पात्रों हटाया स्ट्रिंग की एक प्रति लौटें। यदि वर्ण छोड़े गए हैं या कोई नहीं है, तो व्हाइटस्पेस वर्ण हटा दिए जाते हैं।यदि दिया गया और कोई नहीं, तो अक्षर एक स्ट्रिंग होना चाहिए; स्ट्रिंग में वर्ण स्ट्रिंग के दोनों सिरों से छीन लिया जाएगा इस विधि को बुलाया जाता है।

16

strip() विधि डिफ़ॉल्ट रूप से खाली स्थान के निकाल देता है, तो '\ t' या '\ n' की तरह मानकों से कॉल करने की कोई जरूरत नहीं है। हालांकि, पायथन में तार अपरिवर्तनीय हैं और बदला नहीं जा सकता है, यानी line.strip() कॉल line वस्तु नहीं बदलेगा। नतीजा एक नई स्ट्रिंग है जिसे कॉल द्वारा वापस किया जाता है।

जैसा कि पहले से ही उल्लेख किया गया है, यदि आप अपनी इनपुट फ़ाइल से एक उदाहरण पोस्ट करते हैं तो इससे मदद मिलेगी। यदि प्रत्येक पंक्ति पर एक से अधिक संख्याएं हैं, तो strip() उपयोग करने के लिए फ़ंक्शन नहीं है। इसके बजाय आपको split() का उपयोग करना चाहिए, जो एक स्ट्रिंग विधि भी है।

निष्कर्ष करने के लिए, यह सोचते हैं कि प्रत्येक पंक्ति खाली स्थान के द्वारा अलग कई तैरता है, और है कि आप सभी नंबरों की सूची का निर्माण करना चाहते, तो आप निम्न की कोशिश कर सकते हैं:

floats = [] 
with open(filename) as f: 
    for line in f: 
     floats.extend([float(number) for number in line.split()]) 
0

आप उपयोग कर सकते हैं:

mylist = [] 
# Assuming that you have loaded data into a lines variable. 
for line in lines: 
    mylist.append(line.strip().split('\t') 

डेटा के सभी लाइनों के लिए केवल क्षेत्र मूल्यों के साथ एक अजगर सूची प्राप्त करने के।

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