python-3.x - 解析时未识别制表符
问题描述
我的字符串有 2 个制表符作为
# File contains multiple lines like this
'T1 Original 210 227 Extra Mile'
'T8 Modified 1646 1655 Tickets'
# Eg: "Tx" "indication" "start_index" "end_index" "word"
# 'T1\tOriginal 210 227\tExtra Mile'
我想要第二个标签之后的单词。所以我试图找到 '\t' 的索引并将初始字符串替换为空。
def find_index(s, ch):
return [i for i, ltr in enumerate(s) if ltr == ch]
def extract_words(filename):
extracted_data = [line.rstrip('\n') for line in open(filename)]
search_key = '\t'
for i in range(len(extracted_data)):
indices = find_index(extracted_data[i], search_key)
extracted_data[i] = extracted_data[i].replace(extracted_data[i][:indices[-1]], '')
return extracted_data
但它没有将 '\t' 标识为索引输出为 []。是什么导致了问题?
预期输出
'Extra Mile'
'Tickets'
解决方案
您的某些行不包含制表符-因此没有索引,因此IndexError
. 利用:
if len(indices)>1: # only extract by slicing if indexes found!
检查。
为什么这么复杂?使用str.split("\t")
:
def extract_words(filename):
with open(filename) as f:
lines = [x.strip() for x in f.readlines()]
k = []
for l in lines:
try:
k.append(l.split("\t")[2])
except IndexError:
print (f"no 2 tabs in '{l}'")
return k
t = """T1\tOriginal 210 227\tExtra Mile
T8\tModified 1646 1655\tTickets
Error\ttext"""
fn = "t.txt"
with open(fn,"w") as f:
f.write(t)
print(*extract_words(fn), sep="\n")
输出:
no 2 tabs in 'Error text'
Extra Mile
Tickets
这将适用于带有 2 个选项卡的行,并报告任何没有这些选项卡的行。
推荐阅读
- jquery - 如果另一个元素具有类,则更改元素的可见性
- postgresql - 在不锁定表的情况下回收磁盘空间 - PostgreSQL 10
- api - 无法使用 ionic 2 中的 x-www-form-encoded 调用 post API
- c++ - Visual Studio 2010 单元测试:引用的项目类未被识别
- amazon-web-services - 将快照从 S3 还原到 AWS 托管弹性搜索时出现安全令牌服务异常
- azure-logic-apps - Azure 逻辑应用中的 EDIFACT DELFOR 解码
- c# - 如何在不失去单元测试能力的情况下将日志记录添加到静态类?
- android - 从数据库中获取照片并在列表视图中显示
- delphi - 动态创建一个没有预先声明的变量限制的新组件?
- php - 当您提交帖子/视频时,某些网站如何创建新页面?