从一个文件写入另一个文件

时间:2013-12-07 22:39:25

标签: python

我已经暂时停留在这个Python作业问题上了一段时间:"编写一个完整的python程序,从文件inner.txt读取20个实数,并按排序顺序输出到文件outter。 TXT"

好吧,我所做的是:

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

所以我的思考过程是:打开文本文件,n是其中的读取行列表,我替换其中的所有换行符提示,以便可以正确排序,然后打开我要写入的文本文件并将列表打印到它。第一个问题是它不允许我替换新的行功能,第二个问题是我无法将列表写入文件。

4 个答案:

答案 0 :(得分:1)

我刚试过这个:

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

因此,您不必像这样过滤掉"\n",但可以将其放入int()以将其转换为整数。假设每行有一个数字,它们都是整数。

然后,您需要将每个值存储到列表中。列表中包含.sort() method,您可以使用该列表对列表进行排序。

编辑: 忘了提及,正如其他人已经说过的那样,你需要迭代n中的值,因为它是一个列表,而不是单个项目。

答案 1 :(得分: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

答案 2 :(得分:1)

我猜real表示浮动。因此,您必须将结果转换为float才能正确排序。

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

然后你必须对它进行排序。要重新编写结果,您必须转换为字符串并使用行结尾连接:

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

最后你必须把结果写到目的地。

答案 3 :(得分:0)

好的,让我们一步一步地看一下你想做什么。

首先:从文本文件中读取一些整数。

Pythonic版本:

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(因为readlines返回字符串值)并将其附加到列表fileNumbers
  3. 第二:对列表进行排序

    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]