2014-10-07 7 views
-1

전에 입력 한 경우 사용자 이름이 텍스트로 표시되기를 원합니다. 나는 C++에서이 작업을하고 있지만 파이썬을 연습하고 싶다. 출력은 "else"문을 계속 수행합니다. "noname"또는 "empty"와 같은 문자열을 if 문에서 검색하려고 시도했지만 else 문을 수행합니다. 당신이 어떤 데이터가없는 빈 파일이있는 경우파일과 파이썬 이름이 같음

fr = open('sample.txt','r') 
name = fr.read() 
fr.close() 

if name is None: 
    fw = open('sample.txt','w') 
    stuff = raw_input("enter name:") 
    fw.write(stuff) 
    fw.close() 
else: 
    print(name) 
+0

그것은 파일에 어떤 같다. 그래서 거기에 이름을 쓰면 else 문이 txt 파일에 quack을 입력하면 "돌팔이"라고 말해야합니다. –

+0

나는 파일에 무엇이든 넣습니다. "toby"와 같이 내가 toby 또는 "hi"를 넣었을 때 나는 안녕에 넣습니다. –

+0

이름이 이미 파일에 있다면? –

답변

0

, f.read()는 빈 문자열을 반환 None를 반환하지 않습니다.

따라서 if name is None 대신 if name == '' 또는 확실하게 if name in (None, '')을 쓸 수 있습니다.

당신은 또한 당신의 파일에 이름을 쓸 때 개행 문자를 추가 확인 할 수 있습니다, 그래서 당신은해야한다 : 예를 들어

f.write(name + '\n') 

.

편집 : if name:None 및 빈 문자열 모두가 False으로 계산되므로 Cat Plus Plus에서 언급 한대로 그냥 if name:을 사용할 수 있습니다. 나는이 특정한 질문에 대해 그것이 덜 분명하다고 생각했다.

+0

그건 트릭을 했어, 고마워. –

+0

그냥'if name'. –

0

사용 with 그것은 automtically을 닫고, 파일을 열려면 : 이름 쓰기 전에 존재하는 경우

with open('sample.txt','a+') as names: # if file does not exist, "a" will create it 
    lines = names.read() 
    if lines: # if file has data 
     print("Hello {}".format(lines)) 
    else: # else file is empty, ask for name and write name to file 
     name = raw_input("enter name:") 
     names.write(name) 

확인하려면

with open('sample.txt','a+') as names: 
    lines = names.read() 
    name = raw_input("enter name:") 
    if name in lines: 
     print("Hello {}".format(name)) 
    else: 
     names.write(name) 
관련 문제