我正在尝试构建一个小型爬虫以获取Twitter句柄。我不能为生活解决我一直存在的错误。对于re.search来说,这似乎是完全相同的错误。 re.findall和re.finditer。错误为TypeError: expected string or buffer.
数据的结构如下:CSV:
30,"texg",@handle,,,,,,,,
请注意,打印行工作正常,test = re ....在到达打印行之前出错。
def read_urls(filename):
f = open(filename, 'rb')
reader = csv.reader(f)
data = open('Data.txt', 'w')
dict1 = {}
for row in reader:
print row
test = re.search(r'@(\w+)', row)
print test.group(1)
此外,我还没有在许多不同的线程中解决这个问题,但解释的所有解决方案都没有奏效。看起来似乎无法读取行调用...
答案 0 :(得分:1)
仔细查看您的代码:
for row in reader:
print row
test = re.search(r'@(\w+)', row)
print test.group(1)
请注意,row是列表而不是字符串,并且根据搜索文档:
扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的MatchObject实例。 如果字符串中没有位置与模式匹配,则返回None; 请注意,这与在字符串中的某个点找到零长度匹配不同。
这意味着您应该创建一个字符串并检查test
是否不是None
for row in reader:
print row
test = re.search(r'@(\w+)', ''.join(row))
if test:
print test.group(1)
同时打开没有b
标志的文件,如
f = open(filename, 'r')
答案 1 :(得分:0)
您通过阅读器运行文件后尝试阅读列表。
import re
f = open('file1.txt', 'r')
for row in f:
print(row)
test = re.search(r'@(\w+)', row)
print(test.group(1))
f.close()
如果您想使用CSV阅读器,可以遍历列表。