Python 2.7 对多个文件中的数据进行排序会产生无法读取的输出?

Python 2.7 对多个文件中的数据进行排序会产生无法读取的输出?,python-2.7,character-encoding,Python 2.7,Character Encoding,我有一组100.txt文件,其中包含以EUC-JP编码的转录日语会话数据。文件名都以“data”开头。我想制作一个程序,根据说话者是男性还是女性,将句子分成两个不同的文件。每行以M或F加上一个3位数的扬声器代码开头。这是我读取文件的代码: for i in os.listdir(os.getcwd()): if i.startswith("data") and i.endswith(".txt"): with codecs.open(i,'r',encoding='EUC

我有一组100.txt文件,其中包含以EUC-JP编码的转录日语会话数据。文件名都以“data”开头。我想制作一个程序,根据说话者是男性还是女性,将句子分成两个不同的文件。每行以M或F加上一个3位数的扬声器代码开头。这是我读取文件的代码:

for i in os.listdir(os.getcwd()):
    if i.startswith("data") and i.endswith(".txt"):
        with codecs.open(i,'r',encoding='EUC-JP') as f:
            text = f.read()
有时,说话人的话语会持续几行,因此该行不会以说话人代码开头。为了解决这个问题,我用下面的代码指定了一个当前的演讲者

male_speaker_utterances = []
female_speaker_utterances = []
current_speaker = ' '
for l in text:
    if l.startswith("F"): 
        female_speaker_utterances.append(l)
        current_speaker = 'F'
    elif l.startswith("M"):
        male_speaker_utterances.append(l)
        current_speaker = 'M'
    else:
        if current_speaker == 'F':
            female_speaker_utterances.append(l)
        elif current_speaker == 'M':
            male_speaker_utterances.append(l)
最后,我将数据写入文件:

fem = codecs.open("female_data.txt",'w',encoding='EUC-JP')
mal = codecs.open("male_data.txt",'w',encoding='EUC-JP')
fem.write(female_speaker_utterances)
mal.write(male_speaker_utterances)
我的问题是我得到的输出格式。当我以EUC-JP的形式读取文件时,它只会给我一组字符代码,如下所示:

[u'F', u'1', u'3', u'5', u'\uff1a', u'\u5973', u'\u6027', u'\uff12', u'\uff10', u'\u4ee3', u'\u5f8c', u'\u534a', u'\u3001', u'\u5317', u'\u6d77', u'\u9053', u'\u672d', u'\u5e4c', u'\u5e02', u'\u51fa', u'\u8eab', u'\u3001', u'\u540c', u'\u5e02', u'\u5728', u'\u4f4f', u'\r', u'\n', u'\uff20', u'\u53c2', u'\u52a0', u'\u8005', u'\u306e', u'\u95a2', u'\u4fc2', u'\uff1a', u'\u5927', u'\u5b66', u'\u9662', u'\u306e', u'\u540c', u'\u7d1a', u'\u751f', u'\r', u'\n'
我想要一些可读的文本。将列表写入文件可能有问题吗?我不知道我怎么才能解决这个问题。在将其写入新文件之前,我曾尝试将其转换为带有str(女性_speaker_发音)的字符串,但这给了我相同的不可读输出。
一般来说,我对python和编程非常陌生,这是我在这里的第一篇文章。我正在使用Python 2.7.6。提前谢谢

如果您只想将文本拆分为两个单独的文件;读的时候把它写出来要快得多

您可以使用
glob
轻松筛选出相关文件:

import glob
import codecs

with codecs.open('female.txt', 'w', encoding='EUC-JP') as female,
     codecs.open('male.txt', 'w', encoding='EUC-JP') as male:
         for filename in glob.iglob('/some/directory/data*.txt'):
             with codecs.open(filename, 'r', encoding='EUC-JP') as the_file:
                 for line in the_file:
                     # The first letter of each line is either M or F
                     # The next 3 digits are the speaker code
                     if line[0] == 'M':
                         male.write(line)
                     if line[0] == 'F':
                         female.write(line)

谢谢你的回复!当我试图运行该程序时,它会给我一个“无效语法”错误,因为行末尾有逗号:“with codecs.open('female.txt','w',encoding='EUC-JP')as female,”。有什么想法吗?此外,我不确定如何包含不以扬声器代码开头的行。我可能有点模棱两可,但大多数台词都是以M或F开头的,然后那个人的话语可以持续3行以上,而这些台词没有标记M或F。根据你的建议,这些台词不会包括在内,对吗?再次感谢!您使用的是什么版本的Python?啊,我明白了-如果不是所有的行都正确标记,那么那些未标记的行将被跳过。但是您已经解决了这个问题:)Python 2.7.6。我将把它编辑成原来的问题。是的,这个问题应该得到解决,但glob似乎会使我的代码更简单,所以我想合并它。不过,对于我最初的问题,将列表打印到一个文件中可能会导致编码混乱吗?