2013-12-07 145 views
0

我一直在這個Python作業問題上停留了一段時間:「寫一個完整的python程序,它從文件inner.txt中讀取20個實數並將它們按排序順序輸出到文件outter 。文本。」從一個文件寫入另一個文件

好了,所以我要做的就是:

f=open('inner.txt','r') 
n=f.readlines() 
n.replace('\n',' ') 
n.sort() 
x=open('outter.txt','w') 
x.write(print(n)) 

所以我的思維過程是:打開文本文件時,n是在它讀行列表中,我代替所有的換行符在它提示,因此可以正確排序,然後打開我要寫入的文本文件並將列表打印到它。第一個問題是它不會讓我替換新的線路功能,第二個問題是我無法將一個列表寫入文件。

+0

寫一個循環做替換和寫一次一個字符串。並且不要使用'print'。 – alexis

+1

'n'是*列表*。它沒有'replace'方法。 – mgilson

+1

這是一個完整的程序,讀取所有的數字,並假定該文件除空白分隔的實數外不包含任何內容:'open('outter.txt','w')write('\ n'.join(map(str,排序(map(float,open('inner.txt','rb')。read()。split())))))'不要按原樣使用它。一個接一個地重寫它:使用多行,添加變量,不要一次讀取整個文件等。查找所使用的每種方法的文檔。它應該有助於爲你提供必要的解讀。 – jfs

回答

1

我只是嘗試這樣做:

>>> x= "34\n" 
>>> print(int(x)) 
34 

所以,你不應該過濾掉"\n"這樣,但可以直接把它放進int()把它轉換成一個整數。這是假設你每行有一個數字,它們都是整數。

然後您需要將每個值存儲到列表中。一個列表有一個.sort() method你可以用來排序列表。

編輯: 忘記提及,因爲其他人已經說過,您需要遍歷n中的值,因爲它是一個列表,而不是單個項目。

+0

似乎也適用於'float()',這可能會更好,如果「真正」意味着它可能是十進制值 –

1

這裏有一個一步一步的解決方案,解決你:)

打開文件,無可厚非這裏的問題。

f=open('inner.txt','r') 

不要忘記關閉文件:

f.close()

n現在是每行的列表:

n=f.readlines() 

沒有list.replace方法,所以我建議將上面的行更改爲n = f.read()。然後,這將工作(不要忘了重新分配n,因爲字符串是不可改變的)

n = n.replace('\n','') 

你仍然只能有一個字符串全數字。然而,而不是替換換行符,我建議拆分使用換行符作爲分隔符的字符串:

n = n.split('\n')

然後,將這些字符串轉換爲整數:

`n = [int(x) for x in n]` 

現在,這兩個會工作:

n.sort() 
x=open('outter.txt','w') 

你想寫數字本身,所以用這個:

x.write('\n'.join(str(i) for i in n)) 

最後,關閉文件:

x.close()

使用上下文管理器(在with聲明)是很好的做法,以及,處理文件時:

with open('inner.txt', 'r') as f: 
    # do stuff with f 
# automatically closed at the end 
1

我猜real意味着浮動。所以你必須將結果轉換爲浮點數才能正確排序。

raw_lines = f.readlines() 
floats = map(float, raw_lines) 

然後你必須對它進行排序。要將結果寫回來,必須將其轉換爲字符串並與行結尾連接:

sortеd_as_string = map(str, sorted_floats) 
result = '\n'.join(sortеd_as_string) 

最後,您必須將結果寫入目標。

+0

[@TimTisdall指出](http://stackoverflow.com/questions/20447594/writing-from -one-file-to-another#comment30549562_20447594),可能會出現'str(float(s))== s'往返的問題。 'raw_lines.sort(key = float)'可以用來避免這個問題。 – jfs

0

好吧,讓我們一步一步看看你想要做什麼。

第一:從文本文件中讀取一些整數。

Python的版本:

fileNumbers = [int(line) for line in open(r'inner.txt', 'r').readlines()] 

輕鬆搞定版本:

fileNumbers = list() 
with open(r'inner.txt', 'r') as fh: 
    for singleLine in fh.readlines(): 
     fileNumbers.append(int(singleLine)) 

做些什麼:

  1. 打開文件
  2. 閱讀每一條線,將其轉換int(因爲readlin ES返回字符串值),並把它添加到列表中fileNumbers

二:對列表進行排序

fileNumbers.sort() 

作用:通過它的價值如
sort功能對列表進行排序[5,3,2,4,1] -> [1,2,3,4,5]

第三:它寫一個新的文本文件

with open(r'outter.txt', 'a') as fh: 
    [fh.write('{0}\n'.format(str(entry))) for entry in fileNumbers] 
相關問題