私はこの簡単なコードを持っています:
import re, sys
f = open('findallEX.txt', 'r')
lines = f.readlines()
match = re.findall('[A-Z]+', lines)
print match
エラーが発生する理由がわかりません:
「予期される文字列またはバッファ」
誰でも助けることができますか?
lines
リストです。re.findall()
リストを取りません。
>>> import re
>>> f = open('README.md', 'r')
>>> lines = f.readlines()
>>> match = re.findall('[A-Z]+', lines)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python2.7/re.py", line 177, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
>>> type(lines)
<type 'list'>
からhelp(file.readlines)
。つまりreadlines()
、ループ/反復用です:
readlines(...)
readlines([size]) -> list of strings, each a line from the file.
ファイル内のすべての大文字を検索するには:
>>> import re
>>> re.findall('[A-Z]+', open('README.md', 'r').read())
['S', 'E', 'A', 'P', 'S', 'I', 'R', 'C', 'I', 'A', 'P', 'O', 'G', 'P', 'P', 'T', 'V', 'W', 'V', 'D', 'A', 'L', 'U', 'O', 'I', 'L', 'P', 'A', 'D', 'V', 'S', 'M', 'S', 'L', 'I', 'D', 'V', 'S', 'M', 'A', 'P', 'T', 'P', 'Y', 'C', 'M', 'V', 'Y', 'C', 'M', 'R', 'R', 'B', 'P', 'M', 'L', 'F', 'D', 'W', 'V', 'C', 'X', 'S']
lines
は文字列のリストですが、それではre.findall
機能しません。試す:
import re, sys
f = open('findallEX.txt', 'r')
lines = f.read()
match = re.findall('[A-Z]+', lines)
print match
readlines()
ファイル内のすべての行のリストを返すのでlines
、リストです。おそらく次のようなものが必要です。
for line in f.readlines(): # Iterates through every line and looks for a match
#or
#for line in f:
match = re.findall('[A-Z]+', line)
print match
または、ファイルが大きすぎない場合は、単一の文字列として取得できます。
lines = f.read() # Warning: reads the FULL FILE into memory. This can be bad.
match = re.findall('[A-Z]+', lines)
print match
スニペットの「行」という用語は、一連の文字列で構成されています。
lines = f.readlines()
match = re.findall('[A-Z]+', lines)
行全体をre.findall('pattern',<string>)
行ごとに送信してみることができます
for i in lines:
match = re.findall('[A-Z]+', i)
print match
または行コレクション全体を単一行に変換します (各行はスペースで区切られます)
NEW_LIST=' '.join(lines)
match=re.findall('[A-Z]+' ,NEW_LIST)
print match
これはあなたを助けるかもしれません