首页 > 解决方案 > 正则表达式类型错误:预期的字符串或类似字节的对象 Python

问题描述

我正在尝试遍历来自多个 csv 文件的熊猫系列的一列。我正在迭代,因为我需要检查每一行以查看格式是否与我们想要的匹配。如果不是,我想为表单的每个失败格式创建一个元组(“<bad value?”、“filename”)。我还没有实现这个元组,但想先搞清楚逻辑:

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"\d{10}")
    #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

这很好地遍历了我的第一个 csv。我确实在第一个 csv 的列中打印了数据类型,它是,当我为第二个 csv 执行此操作时,它显示为 <'class int'>。当我运行该函数时,它成功地处理了来自第一个 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: expected string or bytes-like object

我认为正则表达式适用于整数和字符串?如何在不修改 csv 数据框的数据的情况下解决此问题?

标签: pythonpython-3.xregexpandascsv

解决方案


编辑代码购买现在有另一个问题:

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"\d{10}")
#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 文件并将其移动到特定目录的问题。如何通过列表理解做到这一点?


推荐阅读