简体   繁体   English

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

[英]How to rearrange numbers from different lines of a text file in python?

So I have a text file consisting of one column, each column consist two numbers 所以我有一个包含一列的文本文件,每一列包含两个数字

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

I would like to discard the very 1st and the very last number, in this case, 190 and 9893. and basically moves the rest of the numbers one spot forward. 我想舍弃第一个和最后一个数字,在这种情况下为190和9893。基本上将其余的数字向前移动一位。 like this 像这样

My desired output 我想要的输出

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

I hope that makes sense I'm not sure how to approach this 我希望这是有道理的,我不确定该如何处理

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"

Try this: 尝试这个:

  • Read all of them into one list, split each line into two numbers, so you have one list of all your numbers. 将它们全部阅读成一个列表,将每一行分成两个数字,这样您就拥有了所有数字的一个列表。
  • Remove the first and last item from your list 从列表中删除第一项和最后一项
  • Write out your list, two items at a time, with dots in between them. 写出您的列表,一次两个,中间有点。

Here's an example: 这是一个例子:

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'

Try this: 尝试这个:

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')
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

Maybe this will help: 也许这会有所帮助:

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)

I think this might be useful too. 我认为这可能也很有用。 I am reading data from a file name list. 我正在从文件名列表中读取数据。

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

After reading the data I split and store it in the temporary list.After that, I copy data to the main list value which have all of the data.Then I iterate from the second element to second last element to get the output of interest. 读取数据后,我将其拆分并存储在临时列表中,然后将数据复制到包含所有数据的主列表值中,然后从第二个元素迭代到倒数第二个元素以获得感兴趣的输出。 strip function is used in order to remove the '\\n' character from the value. strip函数用于从值中删除'\\ n'字符。

You can later write these values to a file Instead of printing out. 您以后可以将这些值写入文件中,而不用打印出来。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM