1

次のようなPython 2.7.5でスペース区切りのテキストファイルを解析しようとしています:

variable         description      useless data
a1                asdfsdf           2342354 
            Sometimes it goes into further detail about the 
            variable/description here
a2                asdsfda           32123

編集:最初に追加されたスペースについては申し訳ありませんが、私はそれらを見ませんでした

テキスト ファイルを変数と説明を 2 つの列に分けて配列に分割し、不要なデータをすべてカットして、文字列で始まらない行をスキップできるようにしたいと考えています。コードを開始するように設定した方法は次のとおりです。

import os
import pandas
import numpy
os.chdir('C:\folderwithfiles')
f = open('Myfile.txt', 'r')
lines = f.readlines()
for line in lines:
    if not line.strip():
        continue
    else:
        print(line)
print(lines)

現時点では、このコードは変数行の間の記述行のほとんどをスキップしますが、一部はまだ解析中にポップアップします。ライン スキップのトラブルシューティング、または列形成部分の開始を手伝っていただけると助かります。また、Pythonの経験もあまりありません。ありがとう!

編集:コードの前のファイルの一部

CASEID            (id) Case Identification                   1   15   AN



MIDX              (id) Index to Birth History                16   1  No
                           1:6 

後:

CASEID            (id) Case Identification                   1   15   AN

MIDX              (id) Index to Birth History                16   1  No
                           1:6  
4

3 に答える 3

1

スペースで始まる行を除外し、他のすべての行を分割して最初の 2 列を取得します。

これら 2 つのルールをコードに変換します。

with open('Myfile.txt') as f:
    for line in f:
        if not line.startswith(' '):
            variable, description, _ = line.split(None, 2)
            print(variable, description)

それだけです。


または、さらに直接的に翻訳します。

with open('Myfile.txt') as f:
    non_descriptions = filter(lambda line: not line.startswith(' '), f)
    values = (line.split(None, 2) for line in non_descriptions)

タプルvaluesに対するイテレータになりました。(variable, description)そして、それは素晴らしく宣言的です。最初の行は、「スペースで始まる行を除外する」ことを意味します。2 つ目は、「各行を分割して最初の 2 列を取得する」という意味です。(最初のものをフィルターの代わりにgenexprとして、または2番目のものをgeneexprの代わりにマップとして書くことができますが、これが英語の説明に最も近いと思います。)

于 2013-07-12T20:55:20.863 に答える
0

パンダを使用している場合は、これを試してください:

from pandas import read_csv
data = read_csv('file.txt', error_bad_lines=False).drop(['useless data'])

ファイルが (コンマ区切り値ではなく) 固定幅の場合は、次を使用しますpandas.read_fwf

于 2013-07-12T21:06:52.380 に答える