如何在Python中重新排列文本文件不同行的数字?

0 投票
6 回答
934 浏览
提问于 2025-04-17 18:13

我有一个文本文件,里面只有一列,每一行都有两个数字。

190..255
337..2799
2801..3733
3734..5020
5234..5530
5683..6459
8238..9191
9306..9893

我想把第一和最后的数字去掉,也就是190和9893。然后把剩下的数字都往前移动一个位置,变成这样:

我想要的结果是:

255..337
2799..2801
3733..3734
5020..5234
5530..5683
6459..8238
9191..9306

希望这样说能让你明白,我不太确定该怎么做。

6 个回答

3

试试这个:

with open(filename, 'r') as f:
    lines = f.readlines()

numbers = []
for row in lines:
    numbers.extend(row.split('..'))

numbers = numbers[1:len(numbers)-1]
newLines = ['..'.join(numbers[idx:idx+2]) for idx in xrange(0, len(numbers), 2]

with open(filename, 'w') as f:
    for line in newLines:
        f.write(line)
        f.write('\n')
3

试试这个方法:

  • 把所有的内容读进一个列表里,把每一行分成两个数字,这样你就会得到一个包含所有数字的列表。
  • 从你的列表中去掉第一个和最后一个项目。
  • 把你的列表写出来,每次写两个项目,中间用点号隔开。

这里有个例子:

a = """190..255
       337..2799
       2801..3733
       3734..5020
       5234..5530
       5683..6459
       8238..9191
       9306..9893"""
a_list = a.replace('..','\n').split()
b_list = a_list[1:-1]
b = ''
for i in range(len(a_list)/2):
    b += '..'.join(b_list[2*i:2*i+2]) + '\n'
4

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们不太了解这些工具的工作原理时。

比如说,当你在写代码的时候,可能会发现某些功能没有按照预期工作。这时候,你可能需要去查找一些资料,看看别人是怎么解决类似的问题的。StackOverflow就是一个很好的地方,很多程序员会在这里分享他们的经验和解决方案。

在这个平台上,你可以看到很多人提问和回答问题。提问的人会描述他们遇到的具体情况,而回答的人则会根据自己的经验给出建议或者解决办法。这种互动帮助了很多人更好地理解编程中的各种问题。

总之,遇到问题时,不要害怕去寻求帮助,利用好像StackOverflow这样的资源,可以让你在编程的路上走得更顺利。

lines = """190..255
337..2799
2801..3733"""

values = [int(v) for line in lines.split() for v in line.split('..')]
# values = [190, 255, 337, 2799, 2801, 3733]

pairs = zip(values[1:-1:2], values[2:-1:2])
# pairs = [(255, 337), (2799, 2801)]

out = '\n'.join('%d..%d' % pair for pair in pairs)
# out = "255..337\n2799..2801"

撰写回答