Python 将文本文件(逐行)拆分为不同的文件

Python 将文本文件(逐行)拆分为不同的文件,python,text,split,Python,Text,Split,使用python逐行查找数据拆分器 正则表达式? 包含 例如,文件包含: X X Y Z Z Z 我需要一个干净的方式来分割成3个不同的文件,基于字母 作为示例: x、 txt文件如下所示: X X Y Z Z Z y、 txt文件如下所示: X X Y Z Z Z z、 txt文件如下所示: X X Y Z Z Z 这应该做到: with open('my_text_file.txt') as infile, open('x.txt', 'w') as x, open('y

使用python逐行查找数据拆分器

正则表达式? 包含 例如,文件包含:

X
X
Y
Z
Z
Z
我需要一个干净的方式来分割成3个不同的文件,基于字母

作为示例:

x、 txt文件如下所示:

X
X
Y
Z
Z
Z
y、 txt文件如下所示:

X
X
Y
Z
Z
Z
z、 txt文件如下所示:

X
X
Y
Z
Z
Z
这应该做到:

with open('my_text_file.txt') as infile, open('x.txt', 'w') as x, open('y.txt', 'w') as y, open('z.txt', 'w') as z:
    for line in infile:
        if line.startswith('X'):
            x.write(line)
        elif line.startswith('Y'):
            y.write(line)
        elif line.startswith('Z'):
            z.write(line)

这里有一种更通用的方法来完成同样的工作:

from collections import Counter

with open("file.txt", "r+") as file:
    data = file.read().splitlines()
    counter = Counter(data)
    array2d = [[key, ] * value for key, value in counter.items()]
    print array2d # [['Y'], ['X', 'X'], ['Z', 'Z', 'Z']]
    for el in array2d:
        with open(str(el[0]) + ".txt", "w") as f:
            [f.write(e + "\n") for e in el]

上面的代码将生成带有相应值的X.txt、Y.txt和Z.txt。例如,如果您有几个C字母,代码将生成一个文件C.txt。

编辑感谢@bruno desthuilliers,他提醒我正确的方法:

迭代文件对象而不是“readlines”:

def split_by_platform(FILE_NAME, out1, out2, out3):

    with open(FILE_NAME, "r") as infile, open(out1, 'a') as of1, open(out2, 'a') as of2, open(out3, 'a') as of3:
        for line in infile:
            if "X" in line:
                of1.write(line)
            elif "Y" in line:
                of2.write(line)
            elif "Z" in line:
                of3.write(line)
在@dim提示下编辑: 以下是任意长度的标志字符列表的更通用方法:

def loop(infilename, flag_chars):
    with open(infilename, 'r') as infile:
        for line in infile:
            for c in flag_chars:
                if c in line:
                    with open(c+'.txt', 'a') as outfile:
                        outfile.write(line)            

读取文件并计算每个唯一元素的出现次数,然后,只需为每个唯一的元素创建新文件,并相应地编写它们。在条件语句中使用str.starswith在行上迭代如何?您尝试了哪些不起作用的内容?@brunodesshuilliers-@NANA为什么要发布新问题?为什么在此处使用readlines?它会毫无理由地将整个文件加载到内存中,当您可以直接迭代文件`for line in infile:…`。完全正确,我的错误。谢谢你纠正这个问题。@SpghttCd,如果你只有字母X、Y和Z,这将是一个很好的方法,但是如果你有整个字母表,会发生什么呢?我知道你的答案很好地回答了这个问题。但首先它不是OP请求的,其次它导致反复打开和关闭目标文件,所以它也有它的缺点。不过,如果有意思的话,我可以尽快添加“n-char”版本。顺便提醒一下,这里的任何人,包括我自己,因为每个答案都显示了这个错误:使用文件打开模式“a”而不是“w”,直到最后一行才覆盖所有行…: