正则表达式类型错误:预期的字符串或类似字节的对象 Python
Posted
技术标签:
【中文标题】正则表达式类型错误:预期的字符串或类似字节的对象 Python【英文标题】:Regex TypeError: expected string or bytes-like object Python 【发布时间】:2020-10-20 06:25:09 【问题描述】:我正在尝试遍历来自多个 csv 文件的 pandas 系列的列。
我正在迭代,因为我需要检查每一行以查看格式是否与我们想要的匹配。如果不是,我想为表单的每个失败格式创建一个元组(“ 这里调用了这个函数: 这会遍历我的第一个 csv 井。我确实在第一个 csv 的列中打印了数据类型,它是,当我为第二个 csv 执行此操作时,它显示为 。当我运行该函数时,它成功地处理了来自第一个 csv 的数据,但是对于第二个 csv 的“create_datetime”数据以某种方式是 int 类型时抛出了以下错误:
回溯(最近一次调用最后一次):
文件“C:/Users/sys_nsgprobeingestio/Documents/dozie/odfs/odfshistory3.py”,第 234 行,在
odf_history_from_csv_to_dbtable(db_instance)
文件“C:/Users/sys_nsgprobeingestio/Documents/dozie/odfs/odfshistory3.py”,第 214 行,在 odf_history_from_csv_to_dbtable
odfscsv_df = process_csv_formatting(csv)
文件“C:/Users/sys_nsgprobeingestio/Documents/dozie/odfs/odfshistory3.py”,第 190 行,在 process_csv_formatting
errortup = [x for x in odfscsv_df['ODFS_FILE_CREATE_DATETIME'] 如果不是 odfscdate_re.search(x)]
文件“C:/Users/sys_nsgprobeingestio/Documents/dozie/odfs/odfshistory3.py”,第 190 行,在
errortup = [x for x in odfscsv_df['ODFS_FILE_CREATE_DATETIME'] 如果不是 odfscdate_re.search(x)]
TypeError: 预期的字符串或类似字节的对象 我认为正则表达式适用于整数和字符串?如何在不修改 csv 数据框的数据的情况下解决此问题?def process_csv_formatting(csv):
odfscsv_df = pd.read_csv(csv, header=None,names=['ODFS_LOG_FILENAME', 'ODFS_FILE_CREATE_DATETIME', 'LOT', 'TESTER', 'WAFER_SCRIBE'])
odfscsv_df['CSV_FILENAME'] = csv.name
odfscdate_re = re.compile(r"\d10")
#print(odfscsv_df)
errortup = [x for x in odfscsv_df['ODFS_FILE_CREATE_DATETIME'] if not odfscdate_re.search(x)]
#errortup = [x for x in odfscsv_df['ODFS_FILE_CREATE_DATETIME']]
print(errortup)
# for index, row in odfscsv_df.iterrows():
# print(type(row['ODFS_FILE_CREATE_DATETIME']))
return odfscsv_df
def odf_history_from_csv_to_dbtable(db_instance):
odfsdict = db_instance['odfs_tester_history']
#table_row =
totalresult_list = []
dir_dict = make_dict_of_csvprocessing_dirs()
#print(dir_dict)
csvbase_path_list = dir_dict["csvbase_path_list"]
archivefiles_path_set = dir_dict["archivefiles_path_set"]
errorfiles_path_set = dir_dict["errorfiles_path_set"]
emptyfiles_path_set = dir_dict["emptyfiles_path_set"]
for csv in csvbase_path_list: # is there a faster way to compare the list of files in archive and history?
if csv not in archivefiles_path_set and csv not in errorfiles_path_set and csv not in emptyfiles_path_set:
csvhistoryfilelist_to_dbtable(csv, db_instance)
odfscsv_df = process_csv_formatting(csv)
result = odfscsv_df.to_sql('odfs_tester_history', con=odfsdict['engine'], if_exists='append', index=False)
totalresult_list.append(result)
else:
print(csv.name + " is in archive folder already")
#print (totalresult_list)
return totalresult_list
【问题讨论】:
errortup = [x for x in odfscsv_df['ODFS_FILE_CREATE_DATETIME'] 如果不是 odfscdate_re.search(str(x))] 是的,我想,一旦我输入了它,哈哈。我现在的问题是,当且仅当 x 与正则表达式不匹配时,我如何制作元组列表。我累了:errortup = [(odfscsv_df['ODFS_LOG_FILENAME'],x,csv.name) for x in odfscsv_df['ODFS_FILE_CREATE_DATETIME'] 如果不是 odfscdate_re.search(str(x))],但它给了我文件中的所有内容. odfscsv_df['ODFS_LOG_FILENAME'] ==> 您选择整个列。你今天想做什么?你想要什么信息? 可以使用pandas条件选择。这会更容易。 @PramoteKuacharoen 从未听说过 pandas 条件选择。它有什么作用?它使用正则表达式吗?我通过在列表理解中使用 zip 命令弄清楚了我想要做什么。 【参考方案1】:编辑的代码购买现在有另一个问题:
odfscsv_df = pd.read_csv(csv, header=None,names=['ODFS_LOG_FILENAME', 'ODFS_FILE_CREATE_DATETIME', 'LOT', 'TESTER', 'WAFER_SCRIBE'])
odfscsv_df['CSV_FILENAME'] = csv.name
odfscdate_re = re.compile(r"\d10")
#print(odfscsv_df)
errortup = [(odfsname, "Bad_ODFS_FILE_CREATE_DATETIME= " + cdatetime, csv.name) for odfsname,cdatetime in zip(odfscsv_df['ODFS_LOG_FILENAME'], odfscsv_df['ODFS_FILE_CREATE_DATETIME']) if not odfscdate_re.search(str(cdatetime))]
但是现在我遇到了一个问题,我需要标记坏的 csv 文件并将其移动到特定目录中。如何使用列表理解来做到这一点?
【讨论】:
以上是关于正则表达式类型错误:预期的字符串或类似字节的对象 Python的主要内容,如果未能解决你的问题,请参考以下文章
通过 Python 电子邮件库发送电子邮件会引发错误“预期的字符串或类似字节的对象”
Django DateField TypeError 预期的字符串或类似字节的对象
TypeError: Django中日期范围的预期字符串或类似字节的对象错误。
TypeError:预期的字符串或类似字节的对象 HashingVectorizer