2012-04-30 2 views
0

Я только начал писать код, который должен создавать, сравнивать и загружать записи текстового файла. Программа просит вас узнать ваше имя, возраст и ваш рост. Это будет затем создать текстовый файл, например, такие:Чтение информации из текстового документа

Vincent,18,190

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

Name:"name"
Age:"age"
Height:"height"

Ho я могу это сделать?

+0

Как создать файл? – pepr

ответ

4

Вы можете открыть ранее сохраненный текстовый файл, как этот

with open('myData.txt') as infp: 
    for line in infp: 
     # process line 
     line = line.rstrip() 

(это будет также закрыть файл для вас)

Если, например, есть три вещи, хранящиеся в каждой строке в файле вы можете написать

 name, age, height = line.split(',') 

, чтобы получить значения в ваших переменных (при условии, что данные разделены запятыми без пробелов при первоначальном хранении). Затем произвести вывод, который вы в формате вы указали:

 print 'Name:"%s"' %name 
     print 'Age:"%s"' %age 
     print 'Height:"%s"' %height 

как указал @pepr в зависимости от того, как хранятся данные (пробелы между словами и запятыми) там могут быть ведущие/конечные пробелы в данных произведенный split(','), и в этом случае необходимо будет использовать strip(), чтобы избавиться от каких-либо дополнительных заготовок. В показанном образце данных это не так, и приведенный выше код должен работать.

Вот все это завернутые в функцию, чтобы сделать это:

def load(datafile): 

    with open(datafile) as infp: 
     for line in infp: 
     line = line.rstrip() 
     name, age, height = line.split(',') 
     print 'Name:"%s"' %name 
     print 'Age:"%s"' %age 
     print 'Height:"%s"' %height 

Если ваши данные сохраняются в файле с именем «myData.txt», вызовите выше load функцию как этот

load('myData.txt') 
+0

Разбивается запятой. Вы должны разделить запятую и lstrip() пробелы. – pepr

+0

@pepr Спасибо, что поймали, что .. пропустил это. Исправит это. – Levon

+0

имя, возраст, height = line.split (',') для этой строки ожидается ожидаемый блок. – EatMyApples

2
data = open('file.txt').read().splitlines() 
for line in data: 
    person = line.split(',') 
    print 'Name:', person[0] 
    print 'Age:', person[1] 
    print 'Height:', person[2] 
+0

Я все еще немного потерял извинения, как я собираюсь это выразить, так как сохранение и отображение будут двумя отдельными опциями? определение функции displayinfo(): людей = line.split (», ') печати (' Name: '), человек [0] печать (' Возраст: '), человек [1] ​​ печать (' Высота : '), person [2] def loadinfo(): data = open (' packages.txt '). read(). splitlines() ' Я делаю это правильно или нет? – EatMyApples

+0

Это работает? Похоже на меня. – Scorpil

+0

нет, его не работает – EatMyApples

1
fil=open('file.txt','r') 

for line in fil:     # iterate through the file.txt line by line 

    name,age,height=line.rstrip().split(',')  #now after this name='Vincent' and age='18' , height='190' 

    print(name,age,height) 

выход:

vincent 18 190 
+0

Python не подходит для строки в части fil. NameError: name 'fil' не определен – EatMyApples

+0

@ user1365542 Он отлично работает для меня. Похоже, вы не скопировали первую строку этой программы? –

+0

Вы также должны добавить 'fil.close()' в конец кода. По-моему, идентификатор 'f' для короткого живого файлового объекта лучше. – pepr

0

Другим подходом является использование стандартного модуля csv для считывания строк файла в строки, такие как ['Vincent', '18', '190'].

Если вы хотите, чтобы числа как целые числа (то есть не как строки), строки должны быть явно преобразованы через int(str_variable).

0

После того, как вы сохранили файл, используйте это, чтобы читать:

import csv 

filename = 'myfile.txt' 

# the code that creates 
# the file goes here 

the_file = csv.reader(open(filename, 'rb')) 
for line in the_file: 
    # line[0] is Name 
    # line[1] is Age 
    # line[2] is Height 
+0

, но дело в том, что есть e Значения в одной строке, и мне как-то нужно их разделить. – EatMyApples

+0

'line' следует называть' row', поскольку это список элементов, которые уже были разделены модулем csv. Проблема здесь в том, что это * anonymous * 'open()', поскольку это невозможно закрыть явным образом. 'the_file' лучше называться' читателем' (чтобы вызвать меньше путаницы). – pepr

0

Это работает для меня

f = open('temp.txt', 'r') 
for line in f.readlines(): 
    a,b,c = line.split(',') 
    print "Name:%s\nAge:%s\nHeight:%s\n" % (a,b,c) 
f.close() 

Выход

Name:Vincent 
Age:18 
Size:190 
Смежные вопросы