2013-12-07 96 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] 
相关问题