2011-02-16 4 views
0

이 시점에서 (파이썬에 처음 사용하는) 문제는 텍스트 파일에 문자열을 쓰는 것입니다. 내가 겪고있는 문제는 문자열에 줄 바꿈이 없거나 줄 바꿈이 인 경우 각각 문자입니다. 코드는 다음과 같이하십시오파이썬의 file.write() 메서드 및 문자열 처리 문제

import string, io 

FileName = input("Arb file name (.txt): ") 

MyFile = open(FileName, 'r') 

TempFile = open('TempFile.txt', 'w', encoding='UTF-8') 

for m_line in MyFile: 
    m_line = m_line.strip() 
    m_line = m_line.split(": ", 1) 
    if len(m_line) > 1: 
     del m_line[0] 
    #print(m_line) 
    MyString = str(m_line) 
    MyString = MyString.strip("'[]") 
    TempFile.write(MyString) 


MyFile.close() 
TempFile.close() 

내 입력은 다음과 같습니다

1 Jargon 
2 Python 
3 Yada Yada 
4 Stuck 

내 출력 나는 이것이 수행 할 때

JargonPythonYada YadaStuck 

나는 다음이에 소스 코드를 수정 :

import string, io 

FileName = input("Arb File Name (.txt): ") 

MyFile = open(FileName, 'r') 

TempFile = open('TempFile.txt', 'w', encoding='UTF-8') 

for m_line in MyFile: 
    m_line = m_line.strip() 
    m_line = m_line.split(": ", 1) 
    if len(m_line) > 1: 
     del m_line[0] 
    #print(m_line) 
    MyString = str(m_line) 
    MyString = MyString.strip("'[]") 
    #print(MyString) 
    TempFile.write('\n'.join(MyString)) 


MyFile.close() 
TempFile.close() 

동일한 입력과 출력보기 이 같은 S : 이상적으로

J 
a 
r 
g 
o 
nP 
y 
t 
h 
o 
nY 
a 
d 
a 

Y 
a 
d 
aS 
t 
u 
c 
k 

, 나는 그들의 앞에 숫자 않고 별도의 행에 표시하는 단어의 각을 부탁합니다.

감사합니다,

MarleyH

+0

당신은해서는 안'을 MyString = STR (m_line)'당신이로 시작하는 [와로 끝나는] 포함하는 문자열을 얻을 수 있도록이 명령은 문자열의 목록입니다 객체 m_line의 캐릭터 라인 표현을 생성하기 때문에 목록의 문자열 요소의 repreqentations, 즉 '주위에 그들과 함께 말할 것입니다 그리고 당신은 이러한 문자를 스트립해야합니다, 당신은 자신을 만들었습니다. 반대로 list에 적용된 join()은 원하는 결과를 즉시 제공합니다. – eyquem

+0

다음 문자와 공백으로 구분 된 문자열 앞의 숫자를 제거하려면'line.partition ('') [2]'on line being '1 Jargon' – eyquem

답변

1
fileName = input("Arb file name (.txt): ") 
tempName = 'TempFile.txt' 

with open(fileName) as inf, open(tempName, 'w', encoding='UTF-8') as outf: 
    for line in inf: 
     line = line.strip().split(": ", 1)[-1] 

     #print(line) 
     outf.write(line + '\n') 

문제 :

  1. str.split의 결과는() 목록입니다 (이 왜, 당신이 str에 캐스팅 할 때, 당신이 얻을 [ '내 항목']).

  2. 쓰기는 줄 바꿈을 추가하지 않습니다. 원한다면 명시 적으로 추가해야합니다.

2

당신은 원래 '\n'을 제거하고 있기 때문에, 각 라인 후 '\n'를 작성해야; 을 사용하여 문자열을 결합하고 문자열의 각 문자 사이에 삽입하므로 '\n'.join()을 사용하는 아이디어가 작동하지 않습니다. 대신 각 이름 뒤에 하나의 \n이 필요합니다.

import string, io 

FileName = input("Arb file name (.txt): ") 

with open(FileName, 'r') as MyFile: 
    with open('TempFile.txt', 'w', encoding='UTF-8') as TempFile: 
     for line in MyFile: 
      line = line.strip().split(": ", 1) 
      TempFile.write(line[1] + '\n')