복붙노트

[PYTHON] Python : 행이 아닌 열로 CSV 작성

PYTHON

Python : 행이 아닌 열로 CSV 작성

나는 while 루프에서 많은 양의 데이터를 생성하는 python 스크립트를 가지고있다. 이 데이터를 CSV 파일에 작성해야하므로 행이 아닌 열별로 씁니다.

예를 들어 내 스크립트의 루프 1에서 다음을 생성합니다.

(1, 2, 3, 4)

내 CSV 스크립트에 이렇게 반영해야합니다.

Result_1    1
Result_2    2
Result_3    3
Result_4    4

내 두 번째 루프에서 나는 생성 :

(5, 6, 7, 8)

내 CSV 파일에서 이렇게 보일 필요가 있습니다.

Result_1    1    5
Result_2    2    6
Result_3    3    7
Result_4    4    8

while 루프가 끝날 때까지 계속됩니다. 아무도 나를 도울 수 있습니까?

편집하다

while 루프는 100,000 회 이상 지속될 수 있습니다.

해결법

  1. ==============================

    1.csv가 지원하지 않는 이유는 가변 길이 라인이 대부분의 파일 시스템에서 실제로 지원되지 않기 때문입니다. 대신 목록의 모든 데이터를 수집 한 다음 zip ()을 호출하여 이후에 조 변경해야합니다.

    csv가 지원하지 않는 이유는 가변 길이 라인이 대부분의 파일 시스템에서 실제로 지원되지 않기 때문입니다. 대신 목록의 모든 데이터를 수집 한 다음 zip ()을 호출하여 이후에 조 변경해야합니다.

    >>> l = [('Result_1', 'Result_2', 'Result_3', 'Result_4'), (1, 2, 3, 4), (5, 6, 7, 8)]
    >>> zip(*l)
    [('Result_1', 1, 5), ('Result_2', 2, 6), ('Result_3', 3, 7), ('Result_4', 4, 8)]
    
  2. ==============================

    2.대부분의 파일 시스템에서 파일의 적절한 위치에 행을 갱신하는 것은 지원되지 않습니다 (파일의 한 행은 개행 문자로 끝나는 일부 데이터이며 그 다음 행은 그 직후에 시작합니다).

    대부분의 파일 시스템에서 파일의 적절한 위치에 행을 갱신하는 것은 지원되지 않습니다 (파일의 한 행은 개행 문자로 끝나는 일부 데이터이며 그 다음 행은 그 직후에 시작합니다).

    내가보기에는 두 가지 옵션이 있습니다.

    첫 번째 방법에 대한 작은 예제 :

    from itertools import islice, izip, count
    print list(islice(izip(count(1), count(2), count(3)), 10))
    

    이것은 인쇄 할 것이다.

    [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9), (8, 9, 10), (9, 10, 11), (10, 11, 12)]
    

    count가 무한 수의 시퀀스를 생성하더라도

  3. ==============================

    3.

    wr.writerow(item)  #column by column
    wr.writerows(item) #row by row
    

    목표가 출력 열을 열로 작성하는 것만 큼 간단합니다.

    항목이 목록 인 경우 :

    yourList = []
    
    with open('yourNewFileName.csv', 'w', ) as myfile:
        wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
        for word in yourList:
            wr.writerow([word])
    
  4. ==============================

    4.Result_ *에 대해서도 루프에서 생성됩니다 (왜냐하면 CSV 파일에 추가 할 수 없다고 생각하기 때문입니다)

    Result_ *에 대해서도 루프에서 생성됩니다 (왜냐하면 CSV 파일에 추가 할 수 없다고 생각하기 때문입니다)

    나는 이렇게 갈 것이다. 모든 데이터를 하나의 파일에 매트릭스 쓰기 회전 회전 :

    A = []
    
    A.append(range(1, 5))  # an Example of you first loop
    
    A.append(range(5, 9))  # an Example of you second loop
    
    data_to_write = zip(*A)
    
    # then you can write now row by row
    
  5. ==============================

    5.(1) 큰 메모리가 없다. (2) 목록에 행 머리글이있다. (3) 모든 데이터 값이 수레라고 가정 해 보자. 32 비트 또는 64 비트 정수가 모두 정수이면 훨씬 좋습니다.

    (1) 큰 메모리가 없다. (2) 목록에 행 머리글이있다. (3) 모든 데이터 값이 수레라고 가정 해 보자. 32 비트 또는 64 비트 정수가 모두 정수이면 훨씬 좋습니다.

    32 비트 Python에서는 float 객체에 16 바이트, 포인터에 4 바이트를 사용합니다. float를 array.array ( 'd')에 저장하면 8 바이트 만 사용됩니다. 8, 4, 2 또는 1 바이트 (특히 최근 파이썬에서 모든 int가 long 인 경우)에 맞을 모든 데이터가 int (네거티브?) 인 경우 점점 더 많은 비용 절감 효과를 누릴 수 있습니다.

    다음 의사 코드는 array.array ( 'd')에 저장된 부동 소수점을 가정합니다. 메모리 문제가없는 경우에도이 방법을 사용할 수 있습니다. 목록을 사용하려는 경우 필요한 변경 사항을 설명하기 위해 주석을 달았습니다.

    # Preliminary:
    import array # list: delete
    hlist = []
    dlist = []
    for each row: 
        hlist.append(some_heading_string)
        dlist.append(array.array('d')) # list: dlist.append([])
    # generate data
    col_index = -1
    for each column:
        col_index += 1
        for row_index in xrange(len(hlist)):
            v = calculated_data_value(row_index, colindex)
            dlist[row_index].append(v)
    # write to csv file
    for row_index in xrange(len(hlist)):
        row = [hlist[row_index]]
        row.extend(dlist[row_index])
        csv_writer.writerow(row)
    
  6. ==============================

    6.행별로 읽은 다음 명령 행에서 조 변경하십시오. Unix를 사용하는 경우 csvtool을 설치하고 https://unix.stackexchange.com/a/314482/186237의 지침을 따르십시오.

    행별로 읽은 다음 명령 행에서 조 변경하십시오. Unix를 사용하는 경우 csvtool을 설치하고 https://unix.stackexchange.com/a/314482/186237의 지침을 따르십시오.

  7. ==============================

    7.대체 스트리밍 접근 방식 :

    대체 스트리밍 접근 방식 :

    두 단계 모두 김을 잘 다룰 수 있어야합니다.

    함정 :

  8. from https://stackoverflow.com/questions/4155106/python-csv-write-by-column-rather-than-row by cc-by-sa and MIT license