2017-04-16 1 views
1

다음 코드를 사용하여 파일을 열고 내용을 읽고 불필요한 줄을 제거한 다음 파일에 데이터를 쓰고 다운 스트림 분석을 위해 파일을 읽으 려합니다.(_io.TextIOWrapper) 데이터를 읽거나 인쇄하는 방법은 무엇입니까?

with open("chr2_head25.gtf", 'r') as f,\ 
    open('test_output.txt', 'w+') as f2: 
    for lines in f: 
     if not lines.startswith('#'): 
      f2.write(lines) 
    f2.close() 

지금, 나는 F2의 데이터를 읽고 팬더 또는 다른 모듈에 추가 처리를하고 싶어하지만 데이터 (f2를) 읽는 동안 나는 문제로 실행하고 있습니다. (이전 with 블록이 끝날 때) 사용자가 파일에 더 아무것도 할 수

data = f2 # doesn't work 
print(data) #gives 
<_io.TextIOWrapper name='test_output.txt' mode='w+' encoding='UTF-8'> 

data = io.StringIO(f2) # doesn't work 
# Error message 
Traceback (most recent call last): 
    File "/home/everestial007/PycharmProjects/stitcher/pHASE-Stitcher-Markov/markov_final_test/phase_to_vcf.py", line 64, in <module> 
data = io.StringIO(f2) 
TypeError: initial_value must be str or None, not _io.TextIOWrapper 
+0

구체적으로 기재 해주세요. 'open (...) as f2.read()'가 실행되는 동안 코드의 두 번째 줄에서'f2.read()'를 시도했지만 작동하지 않았습니다. – everestial007

답변

4

파일이 이미 닫혀 있습니다. 파일을 다시 열려면 문으로 다른 파일을 만들고 read 특성을 사용하여 파일을 읽습니다.

with open('test_output.txt', 'r') as f2: 
    data = f2.read() 
    print(data) 
+0

for 루프의 끝 부분에'f2.close()'를 넣지 않으려 고 시도했으나 작동하지 않았습니다. 나는 당신이 제안한 것을 이미 알고 있습니다. 방금 파일을 다시 읽고 싶지 않았습니다. 코드에 뭔가 빠져 있는지 궁금합니다. – everestial007

+0

파일을 저장하려면 파일을 닫아야합니다. 다시 열면 * 간단합니다. 'with' 블록은 블록이 끝날 때 자동으로 파일을 닫습니다. .close()를 추가 하든지 상관없이 – abccd

+1

@ everestial007 :'f2.close()'는 앞에있는'with'가 자동으로 그것을하기 때문에 중복됩니다. – martineau

관련 문제