2016-05-02 2 views
0

テキストファイルの行を列に分割する方法はたくさんありますが、スペースなしの行では行えませんでした。pythonは列内のすべての行を分割します。行内には空白を入れません。

私のテキストファイルは次のようになります。
CABDCBADBCADBC
CBDACBABCABCDA
BCDABCDABABABC
CBADCBACBADBCA

そして、私は列にこれを分割して、各列に仕事をしたいと思います。だから私は次のようなものを得なければならない:

次に、各文字が各列に何回あるか知りたい。

それは簡単に見えますが、私はそれを作ることはできませんでしたし、何も似たものが見つかりませんでした...あなたはアイデアがありますか?

+1

は、固定されたあなたの列の幅ですか? – Markus

+0

はい私の行の幅が固定されています – LocuraruaL

答えて

0

あなたはizipCounterを使用することができ、すべての行が同じ長さであると仮定すると、あなたは、Python 2を使用している:

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})), 
    ... 
]  
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() 
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')] 
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})] 
関連する問題