programing

Python에서 새 행을 이전 CSV 파일에 추가하는 방법은 무엇입니까?

goodjava 2022. 12. 20. 21:17

Python에서 새 행을 이전 CSV 파일에 추가하는 방법은 무엇입니까?

이전 CSV 파일에 새 행을 추가하려고 합니다.기본적으로 Python 스크립트를 실행할 때마다 업데이트됩니다.

현재 이전 CSV 행 값을 목록에 저장한 후 CSV 파일을 삭제하고 새 목록 값으로 다시 만듭니다.

더 좋은 방법이 없을까 해서요

with open('document.csv','a') as fd:
    fd.write(myCsvRow)

를 사용하여 파일 열기'a'매개 변수를 사용하면 기존 내용을 덮어쓰는 대신 파일 끝에 추가할 수 있습니다.먹어봐.

파일을 열어두지 않기 위해 표준 라이브러리의 모듈과 스테이트먼트를 사용하여 이 솔루션을 사용하는 것이 좋습니다.

중요한 것은'a'파일을 열 때 추가할 수 있습니다.

import csv   
fields=['first','second','third']
with open(r'name', 'a') as f:
    writer = csv.writer(f)
    writer.writerow(fields)

Python 2.7을 사용하는 경우 Windows에서 불필요한 새로운 행이 발생할 수 있습니다.그것들을 피하려고 노력하면'ab'대신'a'그러나 이로 인해 TypeError가 발생합니다.python에서는 'str'이 아닌 바이트와 같은 개체가 필요합니다.Python 3.6에서는 CSV가 필요합니다.추가newline=''Natacha가 제안하는 바와 같이 Python 2와 3의 하위 비호환성이 발생합니다.

@G M의 답변과 @John La Rooy의 경고에 주목하여 파일을 여는 새로운 행을 추가할 수 있었습니다.'a'모드를 선택합니다.

윈도에서도 줄바꿈 문제를 피하기 위해 다음과 같이 선언해야 합니다.newline=''.

이것으로, 다음의 장소에서 파일을 열 수 있습니다.'a'모드(b 제외).

import csv

with open(r'names.csv', 'a', newline='') as csvfile:
    fieldnames = ['This','aNew']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writerow({'This':'is', 'aNew':'Row'})

일반 라이터는 (Dict 없이) 시도하지 않았지만, 그래도 괜찮을 것 같아요.

w가 아닌 a모드로 파일을 여는 건가요?

python 문서에서 파일 읽기 쓰기를 참조하십시오.

7.2. 파일 읽기 및 쓰기

open()은 파일개체를 반환하며 가장 일반적으로 open(filen, mode)의 두 가지 인수와 함께 사용됩니다.

>>> f = open('workfile', 'w')
>>> print f <open file 'workfile', mode 'w' at 80a0960>

첫 번째 인수는 파일 이름을 포함하는 문자열입니다.두 번째 인수는 파일 사용 방법을 설명하는 몇 개의 문자를 포함하는 다른 문자열입니다. 파일을 읽을 때만 모드를 'r'로 할 수 있으며, 쓰기만 하면 'w'로 할 수 있습니다(같은 이름의 기존 파일이 지워집니다). 그리고 'a'는 추가할 파일을 엽니다. 파일에 쓴 데이터는 자동으로 끝에 추가됩니다.'r+'는 파일을 읽고 쓸 수 있도록 엽니다.mode 인수는 옵션입니다.이 인수가 생략되면 'r'로 간주됩니다.

Windows 에서는, 모드에 「b」를 부가하면 파일이 바이너리 모드로 열리기 때문에, 「rb」, 「wb」, 「r+b」등의 모드도 있습니다.Windows의 Python은 텍스트 파일과 바이너리 파일을 구분합니다.텍스트 파일의 행 끝 문자는 데이터를 읽거나 쓸 때 자동으로 약간 변경됩니다.ASCII 텍스트 파일에서는 이러한 파일 데이터의 백그라운드 수정이 가능하지만 JPEG 또는 EXE 파일과 같은 바이너리 데이터가 손상됩니다.이러한 파일을 읽고 쓸 때는 바이너리 모드를 사용할 수 있도록 주의하십시오.Unix 에서는, 모드에 「b」를 부가하는 것도 문제 없습니다.따라서, 모든 바이너리 파일에 대해서 플랫폼에 의존하지 않고 사용할 수 있습니다.

되어 있는 는, 「」를 할 수 .fieldname''의 csv.DictWriter★★★★

# read header automatically
with open(myFile, "r") as f:
    reader = csv.reader(f)
    for header in reader:
        break

# add row to CSV file
with open(myFile, "a", newline='') as f:
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writerow(myDict)

.csv 파일에 새 행을 추가하려면 다음 방법을 사용합니다.

pose_x = 1 
pose_y = 2

with open('path-to-your-csv-file.csv', mode='a') as file_:
    file_.write("{},{}".format(pose_x, pose_y))
    file_.write("\n")  # Next line.

[주의] :

  • mode='a' modemode 입니다.

Panda를 사용하는 경우 다음과 같이 데이터 프레임을 기존 CSV 파일에 추가할 수 있습니다.

df.to_csv('log.csv', mode='a', index=False, header=False)

mode='a'에서는 덮어쓰기 대신 추가를 하고 header=False에서는 헤더 + 값이 아닌 df 행 값만 추가합니다.

# I like using the codecs opening in a with 
field_names = ['latitude', 'longitude', 'date', 'user', 'text']
with codecs.open(filename,"ab", encoding='utf-8') as logfile:
    logger = csv.DictWriter(logfile, fieldnames=field_names)
    logger.writeheader()

# some more code stuff 

    for video in aList:
        video_result = {}                                     
        video_result['date'] = video['snippet']['publishedAt']
        video_result['user'] = video['id']
        video_result['text'] = video['snippet']['description'].encode('utf8')
        logger.writerow(video_result) 

언급URL : https://stackoverflow.com/questions/2363731/how-to-append-a-new-row-to-an-old-csv-file-in-python