2013-03-07 124 views
0

所以我由一列的文本文件,每列由两个数字如何在Python中重新排列文本文件中不同行的数字?

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

我想放弃非常1日和最后一个数字,在这种情况下,190和9893. 基本上将剩余的数字向前移动一个点。这样

我的期望输出

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

我希望是有道理的,我不知道如何处理这个

回答

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' 
+0

谢谢askewchan – user839145 2013-03-08 18:44:50

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" 
+0

不错,但没有太大的点转换成int和背部 – wim 2013-03-07 04:55:40

+0

非常感谢迈克尔 – user839145 2013-03-07 04:57:38

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

非常感谢你artsiom – user839145 2013-03-07 04:57:20

+0

@ user839145欢迎您 – 2013-03-07 04:57:50

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) 
+0

谢谢您的回复 – user839145 2013-03-08 18:44:18

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 
+0

谢谢Stedy – user839145 2013-03-08 18:43:59

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 

阅读我分割数据并将其存储在临时list.After,我将数据复制到里面有所有的data.Then的主列表值后,我从第二个元素迭代到倒数第二个元素得到兴趣的输出。 strip函数用于从值中删除'\ n'字符。

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

相关问题