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

时间:2013-03-07 04:35:46

标签: python text numbers swap

所以我有一个由一列组成的文本文件,每列包含两个数字

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 个答案:

答案 0 :(得分:4)

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"

答案 1 :(得分: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'

答案 2 :(得分: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 :(得分:3)

temp = []
with open('temp.txt') as ofile:
    for x in ofile:
        temp.append(x.rstrip("\n"))
for x in range(0, len(temp) - 1):
    print temp[x].split("..")[1] +".."+ temp[x+1].split("..")[0]
    x += 1

答案 4 :(得分:2)

也许这会有所帮助:

def makeColumns(listOfNumbers):
    n = int()
    while n < len(listOfNumbers):
        print(listOfNumbers[n], '..', listOfNumbers[(n+1)])
        n += 2

def trim(listOfNumbers):
    listOfNumbers.pop(0)
    listOfNumbers.pop((len(listOfNumbers) - 1))

listOfNumbers = [190, 255, 337, 2799, 2801, 3733, 3734, 5020, 5234, 5530, 5683, 6459, 8238, 9191, 9306, 9893]

makeColumns(listOfNumbers)
print()

trim(listOfNumbers)
makeColumns(listOfNumbers)

答案 5 :(得分:0)

我认为这也可能有用。我正在从文件名列表中读取数据。

data = open("list","r")
temp = []
value = []
print data
for line in data:
    temp = line.split("..")
    value.append(temp[0])
    value.append(temp[1])

for i in range(1,(len(value)-1),2):
    print value[i].strip()+".."+value[i+1]

print value

读取数据后,我将其拆分并存储在临时列表中。之后,我将数据复制到包含所有数据的主列表值。然后我从第二个元素迭代到第二个最后一个元素以获得输出出于兴趣。使用条带功能是为了删除&#39; \ n&#39;来自价值的人物。

稍后您可以将这些值写入文件而不是打印出来。