2017-03-13 1 views
0

현재 기본적인 파이썬을 실험하고 있습니다. .txt 문서에서 4 가지 정보를 파이썬으로 가져 오려고합니다. 거기에서 나는 그것을 모두 쪼개서 기록에 추가 할 것이다. 그 다음에는 레코드에 다른 항목을 추가할지 여부를 묻는 계획을 세웁니다. 그렇다면 필요한 정보를 입력하고 새 항목으로 파일에 다시 저장할 수 있습니다.파일에서 레코드로 정보 가져 오기 (파이썬 3.2.1.1)

나는 사용자에게 각 정보를 개별적으로 입력하도록 요청할 코드를 작성했지만 매번 똑같은 것을 입력하면 정말 짜증났다. 그것은 여기있다, 완벽하게 작동 :

names = [] 
ages = [] 
years = [] 
schools = [] 
Member = [] 

for loop in range(0,2): 
    name = input("Please enter a name") 

    age = int(input("Please enter an age")) 
    while age <= 0 or age >= 100: 
     age = int(input("Please re-enter your age, between 0 and 100")) 

    year = int(input("Please enter your school year")) 
    while year <= 1 or year >= 6: 
     year = int(input("Please enter a valid school year, between 1 and 6")) 

    school = input("Please enter your school") 

    names.append(name) 
    ages.append(age) 
    years.append(year) 
    schools.append(school) 

    member = [names[loop], ages[loop], years[loop], schools[loop]] 
    Member.append(member) 

    Members = [Member] 

print(Members) 

내가 여러 개별 문자열과 내가 위에서처럼, 다른 배열에 추가하고자 한 정수를 입력하려고 할 때 나는 발생하는 문제가 있었다. 여기에 대한 코드입니다 :

with open('Record.txt','r') as scores: 
    data = scores.readlines() 

names = [""]*len(data) 
ages = [0]*len(data) 
years = [0]*len(data) 
schools = [""]*len(data) 
Member = []*len(data) 

counter = 0 

for loop in range(0,len(data)): 
    data[loop] = data[loop][0:-1] 
    x = data[loop].rfind(",") 
    names[loop] = data[loop][:x] 
    print(names) 
    ages[loop] = int(data[loop][x:]) 
    years[loop] = int(data[loop][x+1:]) 
    schools[loop] = data[loop][x+2:] 

    member = [names[loop], ages[loop], years[loop], schools[loop]] 
    Member.append(member) 

I 오류 (라인 28) 내가지고 있다고했다 : 여기

ValueError: invalid literal for int() with base 10: ', Viewforth'

내가에서 읽고 있던 파일입니다 (이후 "Viewforth는"새 라인이) :

Harris, 16, 5, Viewforth

Cody, 16, 5, Viewforth

William, 16, 5, Viewforth

Ross, 17, 6, Viewforth

그냥 "나는 세 번째 후"나이 ","년 "2, 3 및 모든 것에 쉼표 1과 2 사이의"이름 "에 대한 첫 번째 쉼표 전에 모든 것을 저장하려면, 명확하게 학교 ". 앞서 도움을

감사합니다,

  • 해리스 ​​

답변

1

이 줄 문제 : ages[loop] = int(data[loop][x:])data[loop][x:]int로 변환 할 수 없습니다 ', Viewforth'을있는 끝나는 문자열 것입니다.

모든 문자열 분할로 수행하려는 작업이 정확히 무엇인지 확신 할 수 없지만 쉼표 구분 기호로 split()을 사용하면 각 행의 항목 목록을 얻는 것이 훨씬 쉽습니다. 다음과 같은 내용이 있습니다.

items_in_line = line.split(',') 
names.append(items_in_line[0]) 
ages.append(items_in_line[1]) 
years.append(items_in_line[2]) 
schools.append(items_in_line[3]) 
+0

제안을 시도했지만 몇 가지 문제가 있습니다. 우선, 선을 먼저 선언해야하므로 "선"대신 "데이터"여야한다고 생각합니다. 두 번째는 " '목록'객체에 'split'속성이 없다는 오류가 발생했습니다. 나는 이것이 파이썬의리스트가 분할 메소드를 가지고 있지 않기 때문이라고 생각한다. 더 많은 의견을 보내 주시면 감사하겠습니다. – Chloroform

+0

'line'은 파일의 줄에서 얻은 실제 문자열입니다 ([readline] (https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects) 같은 것을 사용)). readlines()를 사용하지 않고 한 번에 각 줄을 수행하고 파일에서 모든 줄을 한꺼번에 가져 오는 것이 좋습니다 ('data'가 바로 지금입니다). – Avantol13

관련 문제