python print TypeError:예상되는 문자열 또는 버퍼




python string buffer interface (4)

나는이 간단한 코드를 가지고있다 :

import re, sys

f = open('findallEX.txt', 'r')
lines = f.readlines()
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 은 문자열 목록입니다. re.findall 은 그 문자열과 re.findall 하지 않습니다. 시험:

import re, sys

f = open('findallEX.txt', 'r')
lines = f.read()
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() 는 for 루프 / iterating입니다.

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'용어는 문자열 집합으로 구성됩니다.

 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

이것은 당신을 도울지도 모른다.





regex