2013-03-07 123 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'字符。

您可以稍後將這些值寫入文件而不是打印出來。

相關問題