【发布时间】:2016-03-05 23:58:13
【问题描述】:
对于某些人来说,下面的解决方案可能看起来很“基本”;我已经尝试了大量的源代码和大量的阅读来完成这项任务,并且不断收到我几乎无法阅读的输出,这些输出根本无法执行,或者只是不让我脱离循环。
我尝试过使用: split()、splitlines()、import re - re.sub()、replace() 等。
但我只能使用基本字符串使它们成功,但在使用带有分隔符的文本文件时却不行。我不完全确定如何使用 for 循环遍历文本文件,尽管我在 Python 中使用它们来创建依赖于增量的批处理文件。我对当前的任务感到很困惑。
================================================ ============================
问题:
我创建了一个包含以下信息的文本文件 (file.txt):
2847:784 3637354:
347263:9379 4648292:
63:38940 3547729:
我想使用第一个冒号 (:) 作为我的分隔符,并让我的输出仅打印每行上出现在它前面的数字。我希望它看起来像下面这样:
2847
347263
63
我已经阅读了几个主题并尝试使用编码解决方案,但没有收到我想要的输出,我认为我也不完全理解其中许多解决方案在说什么。我已经阅读了几本关于该主题的书籍和网站,但无济于事,所以我现在求助的是为了检索可能对我有帮助的代码,然后我将尝试使用它来形成我自己的理解。我希望这不会让任何人觉得他们为我工作太努力了。到目前为止我尝试过的是:
tt = open('file.txt', 'r').read()
[i for i in tt if ':' not in i]
vv = open('file.txt', 'r').read()
bb = vv.split(':')
print(bb)
vv = open('file.txt', 'r').read()
bb = vv.split(':')
for e in bb:
print(e)
vv = open('file.txt', 'r').read()
bb = vv.split(':')
lines = [line.rstrip('\n') for line in bb]
print(lines)
io = open('file.txt', 'r').read()
for line in io.splitlines():
print(line.split(" ",1)[0]
with open('file.txt') as f:
lines = f.readlines()
print(lines)
每一个的输出都没有给我我想要的,但我不确定我做错了什么。有没有我可以咨询的来源以获得指导。我一直在阅读论坛的“流利的 Python”、“使用 Python 进行数据处理”、“自动化无聊的东西”和“艰难地学习 Python”,但我无法解决这个问题。提前感谢您的帮助。
【问题讨论】:
-
您将第一个列表理解设置为什么? (您正在执行
[i for i in tt if ':' not in i],但没有将该值设置为任何值。) -
你试过
print("".join(line.partition(":")[0] for line in open('file.txt')))吗? -
@jsve 老实说,我并不完全理解代码。我只能说,以这种方式发布它实际上给了我输出。当我编辑它以反映以下 (我用 tt 替换最后的 i) 我完全没有收到:'[i for i in tt if ':' not in tt]'
-
@zondo - 我的话!!!谢谢!!我试过你的方法,但是用“\n”替换了“”,效果很好!!非常感谢先生。我想知道您是否可以推荐一些我可以做的阅读以准确了解“加入”方法的工作原理。顺便说一句,我目前的代码是这样的:
print("\n".join(line.partition(":")[0] for line in open('asdf.txt')))你知道我可以从哪里读到我可以发现如何仅通过 for 循环来完成此操作,更类似于我尝试过的其他方法吗? -
Here 是它的文档。
"f".join(["this", "that", "there"])结果为"thisfthatfthere"。我想你会明白的。然而,我放入的内容是所谓的generator expression。它遍历每一行并采用line.partition(":")[0]。line.partition(":")将line拆分为三部分:":"之前、":"和":"之后,因此[0]是":"之前的内容。
标签: python file text delimiter cut