2017-12-21 5 views
-1

現在、特定の文字が見つかるまでファイルからすべての入力を読み取る必要があるアプリケーションで作業しています。コードを使用してPythonの特定の文字までファイルを読む

:たびストリップが\nに遭遇

file=open("Questions.txt",'r') 
c=file.readlines() 
c=[x.strip() for x in c] 

、それが入力から削除し、リストc内の文字列として扱われます。

これは、すべての行がリストの一部に分割されていることを意味しますc。入力ファイルは、内容を持っている場合

1.Hai 
2.Bye\-1 
3.Hello 
4.OAPd\-1 

、私は としてリストを取得したいが、は、私は特別な文字が、このようなに遭遇するたびにポイントをリストアップをしたいですc=['1.Hai\n2.Bye','3.Hello\n4.OApd']

これを手伝ってください。

答えて

1

最も簡単な方法は、1つの文字列としてでファイルを読み、あなたの区切りを越え、それを分割することです:

with open('myFileName') as myFile: 
    text = myFile.read() 
result = text.split(separator) # use your \-1 (whatever that means) here 

ファイルがメモリに内容を完全に保持し、非常に大きい場合には.split()を使用するための単一の文字列としては望ましくないかもしれません(そして分割後のリストに完全な内容を保持することも望ましくないでしょう)。その後、あなたはチャンクでそれを読むことができます:

def each_chunk(stream, separator): 
    buffer = '' 
    while True: # until EOF 
    chunk = stream.read(CHUNK_SIZE) # I propose 4096 or so 
    if not chunk: # EOF? 
     yield buffer 
     break 
    buffer += chunk 
    while True: # until no separator is found 
     try: 
     part, buffer = buffer.split(separator, 1) 
     except ValueError: 
     break 
     else: 
     yield part 

with open('myFileName') as myFile: 
    for chunk in each_chunk(myFile, separator='\\-1\n'): 
    print chunk # not holding in memory, but printing chunk by chunk 
+0

ありがとうございました、あなたのコードは私の仕事をはるかに簡単にしました。 – Tarun

0

"-1"の代わりに "*"を使用しましたが、適切な変更を行います。

s = '1.Hai\n2.Bye*3.Hello\n4.OAPd*' 
temp = '' 
results = [] 

for char in s: 
    if char is '*': 
     results.append(temp) 
     temp = [] 
    else: 
     temp += char 

if len(temp) > 0: 
    results.append(temp) 
関連する問題