>

작은 예처럼 보이는 텍스트 파일이 있습니다 :

작은 예 :

Name    sample1 sample2 sample3
A2M 9805.6  3646.8  1376.48
ACVR1C  20  37.8    20
ADAM12  197.8   120.96  31.28

데이터를 재구성하고 예상 출력처럼 보이는 새 텍스트 파일을 만들려고합니다 :

예상 출력 :

Name    Sample
A2M 9805.6
A2M 3646.8
A2M 1376.48
ACVR1C  20
ACVR1C  37.8
ACVR1C  20
ADAM12  197.8
ADAM12  120.96
ADAM12  31.28

사실 입력 데이터의 마지막 3 개 열이 출력 데이터의 두 번째 열에 포함되며 입력 파일의 첫 번째 열에있는 모든 항목이 3 번 반복됩니다 (이름 당 3 개의 샘플이 있음).

p>

그렇게하기 위해 python3에 다음 코드를 작성했습니다.

def convert(input_file, output_file):
    with open(input_file, 'r') as infile:
        res = {}
        line = infile.split()
        res.keys = line[0]
        res.values = line[2:]
        outfile = open(output_file, "w")
        for k, v in res.items():
            outfile.write(str(k) + '\t'+ str(v) + '\n')

하지만 내가 원하는 것을 반환하지 않습니다. 문제를 해결하는 방법을 알고 있습니까?

  • 답변 # 1

    코드에 몇 가지 문제가 있습니다.

    먼저 outfile 도 열어야합니다   with 내  성명서. 둘째, dict 's keys  그리고 values  읽기 전용입니다. 그리고 마지막으로 불가능한 전체 파일을 분할하려고합니다. 모든 라인을 다음과 같이 반복하고 싶습니다 :

    def convert(input_file, output_file):
        with open(input_file) as infile, open(output_file, "w") as outfile:
            outfile.write("Name\tSample")
            for line in infile:
                values = line.split()
                for value in values[1:]:
                    outfile.write(values[0] + "\t" + value + "\n")
    
    

    형식을 csv 로 변경하는 것을 고려해야하지만  데이터 프레임으로 읽어보세요.

  • 답변 # 2

    이것을 시도해보세요

    d= {}
    with open('file1.txt','r') as f: # Your file
        header = next(f)
        for i in f:
            d.setdefault(i.split()[0],[]).extend(i.split()[1:])
    with open('nflie1.txt','w') as f: # New file
        f.write('Name Sample\n')
        for k,v in d.items():
            for el in v:
                f.write('{} {}\n'.format(k,el))
    
    

    출력 :

    Name Sample
    A2M 9805.6
    A2M 3646.8
    A2M 1376.48
    ACVR1C 20
    ACVR1C 37.8
    ACVR1C 20
    ADAM12 197.8
    ADAM12 120.96
    ADAM12 31.28
    
    

  • 이전 파이썬에서 Julia 사용하기
  • 다음 장고 내에서 부트 스트랩 nav-item 활성 클래스 변경 (드롭 다운)