2013-12-07 3 views
0

Я уже давно застрял в этой задаче домашней работы Python: «Напишите полную программу python, которая считывает 20 действительных чисел из файла inner.txt и выводит их в отсортированном порядке в файл outter .текст."Запись из одного файла в другой

Хорошо, так что я делаю:

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

Так мой мыслительный процесс: Откройте текстовый файл, п список прочитанных строк в нем, я заменяю все новой строки подсказки в нем, так это можно правильно отсортировать, затем я открою текстовый файл, который я хочу записать, и распечатаю список. Первая проблема заключается в том, что он не позволит мне заменить новые функции линии, а вторая проблема заключается в том, что я не могу написать список в файл.

+0

написать цикл, чтобы сделать замену и писать для одной строки в то время. И не используйте 'print'. – alexis

+1

'n' является * списком *. У него нет метода «replace». – mgilson

+1

вот полная программа, которая читает все числа и предполагает, что файл содержит только действительные числа, разделенные пробелами: 'open ('outter.txt', 'w'). Write ('\ n'.join (map (str, sort()()()())))) 'Не использовать его как есть. Перепишите его по частям: используйте несколько строк, добавьте переменные, не сразу прочитайте весь файл и т. Д. Посмотрите документы для каждого используемого метода. Это должно помочь вам понять, что необходимо для разблокировки. – 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 означает float. Поэтому вам нужно преобразовать ваши результаты в 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) 

Наконец, вам нужно будет записать результат в пункт назначения.

+0

, как указано [@TimTisdall] (http://stackoverflow.com/questions/20447594/writing-from -one-file-to-another # comment30549562_20447594), может возникнуть проблема с 'str (float (s)) == s' round-trip. 'raw_lines.sort (key = float)' можно использовать, чтобы избежать проблемы. – jfs

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. Прочитайте каждую строку, преобразовать его to int (потому что readlines возвращать строковые значения) и добавить его в список 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] 
Смежные вопросы