【问题标题】:TypeError: first argument must be string or compiled patternTypeError:第一个参数必须是字符串或编译模式
【发布时间】:2018-09-14 03:28:43
【问题描述】:

我正在从名为blocked_sites 的数据库表中获取值。如果blocked_sites 表中第0 个属性的值出现在文件items.csv 的第19 或第26 个字段中,那么将从csv 文件中排除该csv 行。我正在为此编写代码并收到此错误:

$ python csv_dupli_prev.py
Traceback (most recent call last):
  File "csv_dupli_prev.py", line 48, in <module>
    found = re.search(row[0], row1[19])
  File "/home/debarati/anaconda3/lib/python3.6/re.py", line 182, in search
    return _compile(pattern, flags).search(string)
  File "/home/debarati/anaconda3/lib/python3.6/re.py", line 300, in _compile
    raise TypeError("first argument must be string or compiled pattern")
TypeError: first argument must be string or compiled pattern

代码如下:

connection = pymysql.connect (host = "localhost", user = "root", passwd = "......", db = "city_details")          
cursor = connection.cursor ()
csv_file = csv.reader(open("items.csv", "r"))
newrows = []
cursor.execute ("select * from blocked_sites")
data4 = cursor.fetchall ()
for row in data4:
   for row1 in csv_file:
      str1 = row1[19]
      str2 = row1[26]
      found = re.search(row[0], str1)
      found1 = re.search(row[0], str2)
      if found==None and found1==None and row1 not in newrows:
         newrows.append(row1)
writer = csv.writer(open("items.csv", "w"))
writer.writerows(newrows)   

【问题讨论】:

  • 仅从错误消息来看(感谢包含整个错误消息 - 不是每个人都这样做),row[0] 不是字符串或编译模式。在调试器中查看它或使用print 语句查看它是什么。
  • @ArndtJonasson :我发现了这个错误并修复了它。检查我的答案。

标签: python mysql csv


【解决方案1】:

我在代码中更改了以下行:

cursor.execute ("select * from blocked_sites")

到这里:

cursor.execute ("select content from blocked_sites")

这个错误得到了修复。

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2019-11-04
    • 2021-12-17
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多