2017-12-22 19 views
0

이 고려 원본 파일에 저장 : 내가 정의한 일부 문자에 대한열기 CSV, 다음 CSV 텍스트를 교체하고 라인으로 새로운 캐릭터 라인을 추가하고

"""tom""" 
""fred"" 
"henry" 
Jack 
"""mary""" 

다음과 같은 모습을, 그들을 제거, 다음 문자열을 추가합니다 각 행 (행)의 끝에. 그것은 "작동"하지만, 나는 올바른 방향으로 나아갈 지 확신하지 못한다. ... 내 의견으로는, 원본 파일을 열고, 편집하고, 저장해야한다. 수천 개의 CSV 파일에 대해이 파일을 실행하여 복잡해질 수 있습니다.

import csv 
s = open('Book1.csv','r').read() 
chars = ('$','%','^','*','"','_') # etc 
for c in chars: 
    s = ''.join(s.split(c)) 
out_file = open('Book2.csv','w') 
out_file.write(s) 
out_file.close() 
output = "" 
file_name = 'Book2.csv' 
string_to_add = "@bigfoot.com" 
with open(file_name, 'r') as f: 
    file_lines = [''.join([x.strip(), string_to_add, '\n']) for x in f.readlines()] 
with open(file_name, 'w') as f: 
    f.writelines(file_lines) 


[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
+1

도메인을 & 라인 피드를 추가, 같은 파일에 줄을 다시 작성합니다. 문자가 문자열 중간에있을 수 있습니까? –

+0

파일 줄을 읽지 말고 바꾸기 + 추가를 수행 한 다음 원본 파일에 다시 쓰는 것이 어떻습니까? –

+0

아니요. 문자는 항상 원래 문자열의 한쪽 끝에 있고, 추가 할 문자열은 문자를 제거한 후에 항상 끝에 추가됩니다. – tpcolson

답변

1

파일을 한 번 열어야 읽고 쓸 수 있으며 두 개의 별도 파일을 사용할 필요가 없습니다. 파일 읽기 및 쓰기가 적을수록 스크립트가 더 빨리 실행됩니다.

몇 가지 부수적 포인트 :

  • 사용 with open(...) as f 지속적으로
  • 문자를 대체하는보다 읽기 쉬운 방법은 str.replace()를 사용하는 것입니다.
  • 당신은 당신이 실제로 당신의 코드에 전혀 csv 모듈을 사용하는 것처럼 또한,이 예에서 보이지 않는 str.splitlines()

을 확인하는 것 같아서.

는 여기에 내가 제안 내용은 다음과 같습니다 당신이 그것을과 복잡함을하고

chars = ('$', '%', '^', '*', '"', '_') 
string_to_add = '@bigfoot.com' 

with open('tmp', 'r') as f: 
    s = f.read() 

# Replace unwanted characters 
for c in chars: 
    s = s.replace(c, '') 

# Append line ending 
s = '\n'.join(line + string_to_add for line in s.splitlines()) 

with open('tmp', 'w') as f: 
    f.write(s) 
1

.

먼저 줄을 읽은 다음 줄에 strip을 적용하여 줄의 시작 또는 끝에있는 모든 문자를 제거합니다 (줄 바꿈 포함 또는 작동하지 않음). replace의 루프를 사용하면 strip이 원하는대로 정확하게 수행되므로 여기서는 매우 비효율적이며 불필요합니다.

는 다음에, 정말 CSV/적어도 아니라 텍스트 처리를 전혀`csv` 모듈을 사용하지만 아니에요

input_file = 'Book1.csv' 
chars = '$%^*"_\n' # etc notice the \n (linefeed) 
with open(input_file) as f: 
    lines = [x.strip(chars) for x in f] 
with open(input_file,"w") as f: 
    f.writelines("{}@bigfoot.com\n".format(x) for x in lines) 
+0

고마워요! 이 두 솔루션 모두 완벽하게 작동합니다! – tpcolson