Python:使用竖线作为分隔符拆分字符串失效问题求助
解决竖线分隔字符串拆分无效的问题
嘿,我来帮你梳理下问题所在,以及怎么解决:
问题根源
你的代码有两个关键问题导致拆分没生效:
csv.reader默认分隔符不匹配:csv.reader默认用逗号(,)作为分隔符,所以你的每行数据会被当成单个完整字符串存入row,也就是row是类似['Crimson Rosella|-35.27454538728105|...']的单元素列表。- 拆分结果未赋值:
x[0].split('|')确实会把字符串按竖线拆分,但这个方法是返回一个新的列表,你没有把这个结果存回原变量,所以原datas里的元素根本没变化。
解决方案一:让csv模块直接处理竖线分隔(推荐)
csv模块本身支持自定义分隔符,直接在初始化csv.reader时指定delimiter='|',这样读出来的每行就是已经拆分好的列表,不用手动split:
import os import csv datas = [] location = os.path.dirname(os.path.abspath(__file__)) # 拼接完整文件路径,避免找不到文件的问题 full_file_path = os.path.join(location, filename) with open(full_file_path, newline='') as dar: # 指定分隔符为竖线| reader = csv.reader(dar, delimiter='|') for row in reader: datas.append(row) # 现在datas里的每个元素都是拆分后的列表了 print(datas[0]) # 输出示例:['Crimson Rosella', '-35.27454538728105', '149.11596655088428', 'ACTON', '2004...']
解决方案二:手动split并保存结果
如果你坚持要自己用split处理,记得把拆分后的结果替换原元素或者存入新列表:
import os import csv datas = [] location = os.path.dirname(os.path.abspath(__file__)) full_file_path = os.path.join(location, filename) with open(full_file_path, newline='') as dar: for row in csv.reader(dar): datas.append(row) # 方法1:生成新的处理后列表 processed_datas = [] for x in datas: split_row = x[0].split('|') processed_datas.append(split_row) # 方法2:直接修改原datas列表 # for i in range(len(datas)): # datas[i] = datas[i][0].split('|') print(processed_datas[0]) # 同样得到拆分后的列表
另外补充个小细节:你的代码里filename没有和location拼接,可能会出现找不到文件的情况,用os.path.join组合路径能避免跨平台的路径问题哦~
内容的提问来源于stack exchange,提问作者Ciaran
相关产品推荐
相关产品推荐

