2016-12-20 15 views
-3

テキストファイルに200個の名前のリストがあります。名前のすべての文字は小文字で、6文字または7文字から異なり、複数の見出しに分かれています。一部には小見出しがあります。私はスペースに基づいて分割しようとしますが、名前の各セクション間のスペースでテキストファイルを分割してしまいます。また、\nも印刷されています。私は2つの異なるアイデアを持ち、両方にこだわっています。最後にテキストファイルを解析する

Header 
subheading 
namenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamename 


Heading 


Header 
subheading 
namenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamename 

私は、ヘッダとサブヘッダ(すべて大文字の間で変動し、すべてのlowercaps、および両方のミックス)を無視し、名前だけを印刷しようとしています。すべてをリストとして追加しようとしましたが、テキストを正しく解析できないため、エラーが発生したり、各文字列の各文字を個別に印刷したりしていました。

path_to_file = 'pathgoeshere' 

check_list = [] 

for word in open(path_to_file).read() 
    username = str(word) 
    check_list.append(username) 
    print username 

List = open(path_to_file).readlines() 
print List 


for x in List: 
    user_name = str(x) 
    if user_name.lower(): 
     print user_name 

私の実際のコードでは、正しくフォーマットされていますが、これは私が探していたもののジストです。

最後に、私が必要としない無関係なテキストを数えずに解析し、名前を数えたいと思っています。

ここからどこに行くのかわかりません。

+0

http://stackoverflow.com/help/someone-answersより大きいラインの各グループ –

答えて

0

私はあなたが何をしているかを完全に理解していません。しかし、このあなたが始める必要があります(見出しと小見出しを無視して、すべての名前を印刷):

with open('pathgoeshere') as infile: 
    for line in infile: 
     line = line.strip() 
     if any(char.isupper() for char in line): continue 
     print line 

あなたの名前(あなたが気にもの)はすべて小文字であるので、あなたが離れて得ることができる必要がありますラインはここで大文字

+0

申し訳内の最後の行を見つけます。基本的に私は多くのテキスト(ヘッダー、サブヘッダー、ユーザー名)を持っています。文字はすべて大文字、小文字、または両方の組み合わせです。ユーザー名はすべて小文字で、長さは6文字または7文字です。サブタイトルやヘッダー情報が混在することなく、残りのテキストからユーザー名を解析しようとしています。 – Smithw1

+0

@ Smithw1:コードを実行しようとしましたか?それはあなたが尋ねていることを行う必要があります – inspectorG4dget

+0

ありがとうございました。当初はコードを実行したときにnull値が返されていましたが、一部の調整後には正常に動作するようになりました。あなたのコードは素晴らしい出発点でした。それは、私が気をつけなければならなかった無関係な値を含んでいたので、any(char.isupper())を変更する必要がありました。 もう一度お手伝いします。 – Smithw1

0

を持っている場合は、単純にテストすることは私の考えです:

  • 名前は唯一Headersubheading
  • の後に来るように見えます\nによって0と私の質問が混乱聞こえた場合3.

txt = """Header 
subheading 
namenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamename 


Heading 


Header 
subheading 
namenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamenamename 
""" 

# split text 
s = pd.Series(txt.split('\n')) 

# regex to find lines with nothing but whitespace 
blanks = s.str.match(r'^\s*$') 

# assign groups of lines starting with the first non blank 
# filter groups with `~blanks` to focus on just non blank lines 
non_blank_groups = (~blanks & blanks.shift().fillna(True)).cumsum().loc[~blanks] 

# get value counts of the groups to get rid of groups of lines 
# with only one line like `Heading` 
value_counts = non_blank_groups.value_counts() 

# filter `non_blank_groups` with only the groups with more than 2 lines 
groups = non_blank_groups[non_blank_groups.isin(value_counts.index[value_counts.ge(3)])] 

# finally, groupby and grab last one 
s.groupby(groups).last() 

1.0 namenamenamenamenamenamenamenamenamenamenamena... 
3.0 namenamenamenamenamenamenamenamenamenamenamena... 
dtype: object 
関連する問題