2015-05-22 3 views
1

Я знаю, что Python может читать числа как:Как заставить Python читать новые строки и просто строки?

8 
5 
4 
2 
2 
6 

Но я не уверен, как сделать его прочитать это нравится:

8 5 4 2 2 6 

Кроме того, есть способ сделать питона читать оба пути ? Например:

8 5 4 
2 
6 

Я думаю, что чтение с помощью новых линий будет:

info = open("info.txt", "r") 
lines = info.readlines() 
info.close() 

Как я могу изменить код, чтобы он будет читать вниз и в стороны, как и в третьем примере выше?

У меня есть программа, как это:

info = open("1.txt", "r") 
lines = info.readlines() 

numbers = [] 
for l in lines: 
    num = int(l) 
    numbers.append(str(num**2)) 
info.close() 

info = open("1.txt", "w") 
for num in numbers: 
    info.write(num + "\n") 
info.close() 

Как я могу сделать программу читать каждый номер отдельно в новых линиях и только линии?

+1

Я просто написал код, который вы имеете в вашей программе, но для другого пользователя около 45 минут назад ... – heinst

+0

Вы не можете делать такие вещи, вместо этого вы можете использовать вложенный цикл. – Kasramvd

ответ

0
info = open("1.txt", "r") 
lines = info.readlines() 

numbers = [] 
for line in lines: 
    for num_str in line.split(' '): 
     num = int(num_str) 
     numbers.append(str(num**2)) 
info.close() 
0
info = open("test.txt", "r") 
lines = info.readlines() 
numbers = [] 
for l in lines: 
    l = l.strip() 
    lSplit = l.split(' ') 
    if len(lSplit) == 1: 
     num = int(l) 
     numbers.append(str(num**2)) 
    else: 
     for num in lSplit: 
      num2 = int(num) 
      numbers.append(str(num2**2)) 
print numbers 
info.close() 
0
file_ = """ 
1 2 3 4 5 6 7 8 
9 10 
11 
12 13 14 
""" 


for number in file_ .split(): 
    print number 

>> 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
+0

Почему '[x for x in ...]'? –

+0

@StefanPochmann благодарит за комментарий, я забыл сделать его в оригинальной форме, попробовав что-то еще. – farhawa

1

Сохраняя их как строки:

with open("info.txt") as fobj: 
    numbers = fobj.read().split() 

Или, преобразуя их в целые числа:

with open("info.txt") as fobj: 
    numbers = [int(entry) for entry in fobj.read().split()] 

Это работает с одним номером и несколько номеров в каждой строке. Это содержимое файла:

1 
2 
3 4 5 
6 
7 
8 9 10 
11 

приведет к этому выходу для numbers:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

Этот подход читает весь файл сразу. Если ваш файл действительно большой, это нормально.

+0

Вот что я сделал бы. Лучше также 'map (int, ..)' it. –

+0

@StefanPochmann Да, я все еще редактировал. ;) –

0

Хороший способ сделать это с генератором, который выполняет итерации по линиям, и для каждой строки дает каждое из чисел на нем. Это отлично работает, если на линии (или ни одной) есть только один номер.

def numberfile(filename): 
    with open(filename) as input: 
     for line in input: 
      for number in line.split(): 
       yield int(number) 

Тогда вы можете просто написать, например:

for n in numberfile("info.txt"): 
    print(n) 
0

Если вы не заботитесь сколько чисел в каждой строке, то вы могли бы попробовать это, чтобы создать список квадратов всех номера.

Я упростил свой код немного просто итерацию открытого файла, используя with заявление, но итерации по readlines() результату будет работать так же хорошо (для небольших файлов - для больших, этот метод не требует для хранения всего содержимого файла в памяти).

numbers = [] 
with open("1.txt", 'r') as f: 
    for line in f: 
     nums = line.split() 
     for n in nums: 
      numbers.append(str(int(n)**2)) 
0

Еще один еще не опубликованный способ ...

numbers = [] 
with open('info.txt') as f: 
    for line in f: 
     numbers.extend(map(int, line.split())) 
Смежные вопросы