Вместо проверки выходного файла на номер, если он уже записан, лучше сохранить эту информацию в переменной (a set
или list
).Это спасет вас от чтения с диска.
Для поиска в файле чисел, которые вам нужно перебрать в каждой строке этого файла, вы можете сделать это с помощью for line in open('input'):
loop, где input
- это имя вашегофайл.На каждой итерации line
будет содержать одну строку входного файла, заканчивающуюся символом конца строки '\ n'.
На каждой итерации вы должны пытаться преобразовать значение в этой строке в число, int()
функция может быть использована.Вы можете захотеть защитить себя от пустых строк или нечисловых значений с помощью оператора try
.
В каждой итерации с номером, который вы должны проверить, не было ли найденное вами значение уже записано в выходной файлпроверка set
уже написанных номеров.Если значение еще не задано, добавьте его и запишите в выходной файл.
#!/usr/bin/env python
numbers = set() # create a set for storing numbers that were already written
out = open('output', 'w') # open 'output' file for writing
for line in open('input'): # loop through each line of 'input' file
try:
i = int(line) # try to convert line to integer
except ValueError: # if conversion to integer fails display a warning
print "Warning: cannot convert to number string '%s'" % line.strip()
continue # skip to next line on error
if i not in numbers: # check if the number wasn't already added to the set
out.write('%d\n' % i) # write the number to the 'output' file followed by EOL
numbers.add(i) # add number to the set to mark it as already added
В этом примере предполагается, что файл input
содержит отдельные числа в каждой строке.В случае пустого в неправильной строке предупреждение будет отображаться на stdout
.
Вы также можете использовать list
в приведенном выше примере, но это может быть менее эффективно.Вместо numbers = set()
используйте numbers = []
и вместо numbers.add(i)
: numbers.append(i)
.Условие if остается прежним.