2015-12-27 8 views
5

में अपठनीय फ़ाइल को लिखने के लिए लिखता है मैं चीनी ग्रंथों पर पाठ विश्लेषण करने की कोशिश कर रहा हूं। कार्यक्रम नीचे प्रदान किया गया है। मुझे 浜烘皯鏃ユ姤绀捐 जैसे अपठनीय पात्रों के साथ परिणाम मिला। और अगर मैं आउटपुट फ़ाइल result.csv से result.txt में बदलता हूं, तो वर्ण 人民日报社论 के रूप में सही हैं। तो इसमें क्या गलत है? मैं समझ नहीं पा रहा हु। मैंने decoder और encoder जोड़ने सहित कई तरीकों की कोशिश की।पायथन सीएसवी एक्सेल (चीनी वर्ण)

# -*- coding: utf-8 -*- 
    import os 
    import glob 
    import jieba 
    import jieba.analyse 
    import csv 
    import codecs 

    segList = [] 
    raw_data_path = 'monthly_raw_data/' 
    file_name = ["201010", "201011", "201012", "201101", "201103", "201105", "201107", "201109", "201110", "201111", "201112", "201201", "201202", "201203", "201205", "201206", "201208", "201210", "201211"] 

    jieba.load_userdict("customized_dict.txt") 

    for name in file_name: 
     all_text = "" 
     multi_line_text = "" 
     with open(raw_data_path + name + ".txt", "r") as file: 
      for line in file: 
       if line != '\n': 
        multi_line_text += line 
      templist = multi_line_text.split('\n') 
      for text in templist: 
       all_text += text 
      seg_list = jieba.cut(all_text,cut_all=False) 
      temp_text = [] 
      for item in seg_list: 
       temp_text.append(item.encode('utf-8')) 

      stop_list = [] 
      with open("stopwords.txt", "r") as stoplistfile: 
       for item in stoplistfile: 
        stop_list.append(item.rstrip('\r\n')) 

      text_without_stopwords = [] 
      for word in temp_text: 
       if word not in stop_list: 
        text_without_stopwords.append(word) 

      segList.append(text_without_stopwords) 


    with open("results/result.csv", 'wb') as f: 
     writer = csv.writer(f) 
     writer.writerows(segList) 
+0

आप अक्षरों को कैसे पहचानते हैं "अपठनीय" हैं। क्या आप Excel के साथ csv-file खोलते हैं? कमांड लाइन टूल जैसे 'कम' के साथ इसे देखें? इसे एक टेक्स्ट एडिटर के साथ खोलें? –

+0

हां, मैं इसे एक्सेल के साथ खोलता हूं, अगर मैं 'result.csv' फ़ाइल को' result.txt' में बदलता हूं, तो मैं सभी पात्रों को पढ़ सकता हूं। यह बड़ा अजीब है। – flyingmouse

+1

एक्सेल में कोई समस्या है जहां यह विशेष वर्णों को जोड़ती है। उदाहरण के लिए नोटपैड ++ में result.csv खोलने का प्रयास करें और देखें कि यह सही है या नहीं। – Untitled123

उत्तर

6

UTF-8 एन्कोडिंग के लिए, एक्सेल की आवश्यकता है बीओएम (बाइट क्रम चिह्न) फ़ाइल के शुरू में लिखा कोडपॉइंट या यह ANSI एन्कोडिंग है, जो वातावरण पर निर्भर है ग्रहण करेगा। U+FEFF यूनिकोड बीओएम है। यहां एक उदाहरण दिया गया है जो एक्सेल में सही तरीके से खुल जाएगा:

#!python2 
#coding:utf8 
import csv 

data = [[u'American',u'美国人'], 
     [u'Chinese',u'中国人']] 

with open('results.csv','wb') as f: 
    f.write(u'\ufeff'.encode('utf8')) 
    w = csv.writer(f) 
    for row in data: 
     w.writerow([item.encode('utf8') for item in row]) 

पूर्णता के लिए, पायथन 3 इसे आसान बनाता है। wb और utf-8-sig एन्कोडिंग के बजाय newline='' पैरामीटर स्वचालित रूप से एक बीओएम जोड़ता है। प्रत्येक आइटम को एन्कोड करने की आवश्यकता के बजाय यूनिकोड तार सीधे लिखा जाता है।

#!python2 
#coding:utf8 
import csv 

data = [[u'American',u'美国人'], 
     [u'Chinese',u'中国人']] 

with open('results.csv','wb') as f: 
    f.write(u'\ufeff'.encode('utf8')) 
    w = csv.writer(f) 
    for row in data: 
     w.writerow([item.encode('utf8') for item in row]) 

इस कोड को ब्लॉक csv फ़ाइल उत्पन्न:

#!python2 
#coding:utf8 
import unicodecsv 

data = [[u'American',u'美国人'], 
     [u'Chinese',u'中国人']] 

with open('results.csv','wb') as f: 
    w = unicodecsv.writer(f,encoding='utf-8-sig') 
    w.writerows(data) 
+0

मुझे आपके पहले कोड (पायथन 2 का उपयोग करके एक त्रुटि मिली।एक्स): 'यूनिकोड डीकोड त्रुटि:' ascii 'कोडेक स्थिति 0 में बाइट 0xe4 को डीकोड नहीं कर सकता है: क्रमशः श्रेणी में नहीं है (128) ' – flyingmouse

+0

@flyingmouse, सुनिश्चित करें कि आप यूनिकोड तारों को एन्कोड कर रहे हैं और बाइट स्ट्रिंग नहीं हैं। यदि आप बाइट स्ट्रिंग पर '.encode (' utf8 ')' कहते हैं, तो पायथन 2 इसे एक यूनिकोड स्ट्रिंग में बदलने की कोशिश करने के लिए एक अंतर्निहित '.decode ('ascii') करेगा। –

0

यहाँ एक और तरीका थोड़े मुश्किल है:

#!python3 
#coding:utf8 
import csv 

data = [[u'American',u'美国人'], 
     [u'Chinese',u'中国人']] 

with open('results.csv','w',newline='',encoding='utf-8-sig') as f: 
    w = csv.writer(f) 
    w.writerows(data) 

वहाँ भी 3 पार्टी मॉड्यूल unicodecsv कि अजगर 2 आसान रूप में अच्छी तरह बना देता है एन्कोडेड यूटीएफ -8।

  1. नोटपैड के साथ खुला फ़ाइल ++ (या एनकोड की सुविधा के साथ अन्य संपादक)
  2. एन्कोडिंग ->परिवर्तित
  3. ANSI के बचाने Excel के साथ

ओपन फाइल, यह ठीक है।

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