python拆分列中的所有行,行中没有空格

时间:2016-05-02 14:49:35

标签: python split lines

我已经看到很多方法将文本文件的行分成列,但是我找不到使用没有空格的行的方法。

我的文字文件如下:
CABDCBADBCADBC
CBDACBABCABCDA
BCDABCDABABABC
CBADCBACBADBCA

我想将其拆分为列,然后使用每列。所以我应该得到类似的东西:

a = [C,C,B,C]  
b = [A,B,C,B]  
c = [B,D,D,A]  
[...]

然后我想知道每列中每个字母的次数。

看起来很简单,但我没有成功,也没有找到类似的东西......你有什么想法吗?

4 个答案:

答案 0 :(得分:0)

这是一个生成器对象,它将在调用下一个方法时返回每一列。它假定所有线都具有相同的长度。但如果它们不是这样,你可以在一个简单的尝试中包装附加,除了块

def generateCol(f):
    lines = f.readlines()
    col_count = len(lines[0]) #Assuming all lines are of the same length
    for col in xrange(col_count):
        curr_col = []
        for line in lines:
            curr_col.append(line[col])
        yield curr_col

用法:

gen = generateCol(open('fileName', 'r'))
print gen.next()

答案 1 :(得分:0)

如果您希望每个字符都在单独的列中,则会给出解决方案,即所有行的长度都相同

st = \
"""CABDCBADBCADBC
CBDACBABCABCDA
BCDABCDABABABC
CBADCBACBADBCA"""

print zip(*st.split("\n"))

结果:

[('C', 'C', 'B', 'C'), ('A', 'B', 'C', 'B'), ('B', 'D', 'D', 'A'), ('D', 'A', 'A', 'D'), ('C', 'C', 'B', 'C'), ('B', 'B', 'C', 'B'), ('A', 'A', 'D', 'A'), ('D', 'B', 'A', 'C'), ('B', 'C', 'B', 'B'), ('C', 'A', 'A', 'A'), ('A', 'B', 'B', 'D'), ('D', 'C', 'A', 'B'), ('B', 'D', 'B', 'C'), ('C', 'A', 'C', 'A')]

答案 2 :(得分:0)

假设所有行都是相同的长度并且您使用的是Python 2,则可以使用izipCounter

from collections import Counter
from itertools import izip

with open('test.txt') as f:
    print [(x, Counter(x)) for x in izip(*(line.strip() for line in f))]

输出(部分):

[
    (('C', 'C', 'B', 'C'), Counter({'C': 3, 'B': 1})), 
    (('A', 'B', 'C', 'B'), Counter({'B': 2, 'A': 1, 'C': 1})), 
    (('B', 'D', 'D', 'A'), Counter({'D': 2, 'A': 1, 'B': 1})),
    ...
]    

答案 3 :(得分:0)

如果所有行的长度相同:

with open(path_to_file) as f:
    lines = [line.strip() for line in f.readlines()]  # getting rid of '\n'
    columns = [[line[i] for line in lines] for i in range(len(lines[0]))]

print(columns)  # columns is a list of lists, each list is a column
>> [['C', 'C', 'B', 'C'], ['A', 'B', 'C', 'B'], ... , ['C', 'A', 'C', 'A']]

现在计算每列中的每个字母只需使用count()collections.Counter

from collections import Counter

print([Counter(col) for col in columns])
>>  [Counter({'C': 3, 'B': 1}), Counter({'B': 2, 'C': 1, 'A': 1}), ...,
     Counter({'C': 2, 'A': 2})]