2013-06-12 8 views
7

Eprime को लिखने के लिए एक शब्दकोश में एक txt फ़ाइल पार्स इस तरह एक .txt फ़ाइल आउटपुट नष्ट कर दिया।csv फ़ाइल

 {subject: [7, 7], bias1Answer : [1, 0], itemID: [7, 2]}
 
def load_data(filename): 
    data = {} 
    eprime = open(filename, 'r') 
    for line in eprime: 
     rows = re.sub('\s+', ' ', line).strip().split(':') 
     try: 
      data[rows[0]] += rows[1] 
     except KeyError: 
      data[rows[0]] = rows[1] 
    eprime.close() 
    return data 
 
for line in open(fileName, 'r'): 
    if ':' in line: 
     row = line.strip().split(':') 
     fullDict[row[0]] = row[1] 
print fullDict 
कचरा उत्पादन नीचे लिपियों के

दोनों:

मैं एक शब्दकोश है कि मूल्य के रूप में के बाद कुंजी और के रूप में पेट के पहले पाठ प्रदर्शित होने के पाठ ले लिया बनाने की कोशिश की :

 
{'\x00\t\x00M\x00e\x00a\x00n\x00s\x00E\x00f\x00f\x00e\x00c\x00t\x00B\x00i\x00a\x00s\x00': '\x00 \x005\x00\r\x00', '\x00\t\x00B\x00i\x00a\x00s\x002\x00Q\x00.\x00D\x00u\x00r\x00a\x00t\x00i\x00o\x00n\x00E\x00r\x00r\x00o\x00r\x00': '\x00 \x00-\x009\x009\x009\x009\x009\x009\x00\r\x00' 

यदि मैं शब्दकोश सेट अप कर सकता हूं, तो मैं इसे एक सीएसवी में लिख सकता हूं फ़ाइल जो इस तरह दिखेगी !!:

 Subject itemID ... bias1Answer 
    7  7    1 
    7  2    0 

उत्तर

5

आपको शब्दकोश बनाने की आवश्यकता नहीं है।

import codecs 
import csv 

with codecs.open('eprime.txt', encoding='utf-16') as f, open('output.csv', 'w') as fout: 
    writer = csv.writer(fout, delimiter='\t') 
    writer.writerow(['Subject', 'itemID', 'bias1Answer']) 
    for line in f: 
     if ':' in line: 
      value = line.split()[-1] 

     if 'Subject:' in line: 
      subject = value 
     elif 'itemID:' in line: 
      itemID = value 
     elif 'bias1Answer:' in line: 
      bias1Answer = value 
      writer.writerow([subject, itemID, bias1Answer]) 
+0

धन्यवाद! यह पूरी तरह से काम करता है! – user2476665

+0

मुझे 'कोडेक्स' के बारे में पता नहीं था कि एक उपयोगी उपकरण क्या है! – Akavall

0

आपका दूसरा दृष्टिकोण काम करेगा लेकिन प्रत्येक शब्दकोश कुंजी के लिए मूल्य एक सूची होना चाहिए। वर्तमान में शब्दकोश में प्रत्येक कुंजी के लिए आप केवल एक मान संग्रहीत कर रहे हैं जिसके परिणामस्वरूप केवल अंतिम मान संग्रहीत हो रहा है। आप अपने कोड को संशोधित कर सकते हैं ताकि प्रत्येक कुंजी के लिए मान एक सूची हो। नीचे कोड एक ही प्राप्त होगा:

for line in open(fileName, 'r'): 
    if ':' in line: 
     row = line.strip().split(':') 
     # Use row[0] as a key, initiate its value 
     # to be a list and add row[1] to the list. 
     # In case already a key 'row[0]' 
     # exists append row[1] to the existing value list 
     fullDict.setdefault(row[0],[]).append(row[1]) 
print fullDict 
0

Eprime आउटपुट UTF-16 के साथ एनकोडेड है की तरह लगता है ..

>>> print '\x00\t\x00M\x00e\x00a\x00n\x00s\x00E\x00f\x00f\x00e\x00c\x00t\x00B\x00i\x00a\x00s\x00'.decode('utf-16-be') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/encodings/utf_16_be.py", line 16, in decode 
    return codecs.utf_16_be_decode(input, errors, True) 
UnicodeDecodeError: 'utf16' codec can't decode byte 0x00 in position 32: truncated data 
>>> print '\x00\t\x00M\x00e\x00a\x00n\x00s\x00E\x00f\x00f\x00e\x00c\x00t\x00B\x00i\x00a\x00s\x00'.decode('utf-16-be', 'ignore') 
    MeansEffectBias 
0

मैं जानता हूँ कि यह एक पुराने सवाल है तो हो सकता है आप लंबे समय के बाद से इसे हल किया है, लेकिन मुझे लगता है कि आप इसकी आवश्यकता के मुकाबले एक जटिल तरीके से इस पर पहुंच रहे हैं। मुझे लगता है कि किसी और के पास एक ही समस्या होने पर मुझे जवाब मिलेगा और इसे पाता है।

आप चीजों को इस तरह से कर रहे हैं क्योंकि आप एक सॉफ्टवेयर कुंजी नहीं है, यह पता चला है कि ई-मर्ज और ई DataAid कार्यक्रमों eprime एक महत्वपूर्ण आवश्यकता नहीं है के लिए मदद कर सकता है। बिल्ड फ़ाइलों को संपादित करने के लिए आपको केवल कुंजी की आवश्यकता है। जो भी आपको .txt फ़ाइलों के साथ प्रदान करता है, शायद इन प्रोग्रामों के लिए एक स्थापित डिस्क होनी चाहिए। यदि नहीं, तो यह पीएसटी वेबसाइट पर उपलब्ध है (मैं आप एक खाता बनाने के लिए एक सीरियल कोड की जरूरत का मानना ​​है, लेकिन कुछ नहीं)

Eprime आम तौर पर उस पाठ फ़ाइल की सामग्री का मिलान एक .edat फ़ाइल बनाता है आपको एक उदाहरण पोस्ट किया है का। कभी-कभी अगर ईप्रिम क्रैश हो जाता है तो आपको एडिट फ़ाइल नहीं मिलती है और केवल .txt है। सौभाग्य से आप .txt फ़ाइल से edat फ़ाइल जेनरेट कर सकते हैं।

यहाँ कैसे मैं इस मुद्दे दृष्टिकोण होता है:

  1. आप edat फ़ाइलें उपलब्ध पहला प्रयोग ई DataAid फ़ाइलें ठीक करने के लिए नहीं है, तो।

  2. तो मानते हुए आप आप उपयोग कर सकते ई-मर्ज edat के सभी में सभी प्रतिभागियों ने इस कार्य को पूरा करने के लिए एक साथ फ़ाइलें विलय करने के लिए एक से अधिक भागीदारों की है।

  3. विलय फ़ाइल खोलें। फ़ाइल में आपके पास कितना है इसके आधार पर यह थोड़ा अराजक दिख सकता है। आपको टूल्स पर जाना होगा-> कॉलम व्यवस्थित करें। यह आपके सभी चरों की एक सूची दिखाएगा।

  4. समायोजित करें ताकि केवल वांछित चर दाएं हाथ के बॉक्स में हों। ठीक है हिट करें।

  5. तब आपके पास अपने अंतिम लक्ष्य जैसा कुछ होना चाहिए जिसे एक सीएसवी के रूप में निर्यात किया जा सकता है।

आप इस कार्यक्रम में कई प्रक्रियाओं है, तो आप इस बिंदु पर लाइनों कि सिर्फ स्टार्टअप जानकारी और स्थानों पर जहां आपके चर या ब्याज हैं NULL है हो सकता है। आप टूल्स-> फ़िल्टर पर जाकर और उन पंक्तियों को समाप्त करने के लिए फ़िल्टर बनाकर इसे ठीक कर सकते हैं।

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