.CSV 파일 (input.csv)을보고 텍스트 파일 (output.txt)에 나열된대로 특정 요소 (corrected.csv)로 시작하는 행만 다시 쓰는 프로그램을 작성하려고합니다.
지금 내 프로그램은 다음과 같습니다.
import csv
lines = []
with open('output.txt','r') as f:
for line in f.readlines():
lines.append(line[:-1])
with open('corrected.csv','w') as correct:
writer = csv.writer(correct, dialect = 'excel')
with open('input.csv', 'r') as mycsv:
reader = csv.reader(mycsv)
for row in reader:
if row[0] not in lines:
writer.writerow(row)
안타깝게도이 오류가 계속 발생하며 그에 대한 단서가 없습니다.
Traceback (most recent call last):
File "C:\Python32\Sample Program\csvParser.py", line 12, in <module>
for row in reader:
_csv.Error: line contains NULL byte
여기 에있는 모든 사람들 이 저를이 지점까지 데려다 준 것에 감사드립니다.
답변
답변
input.csv에 NUL 바이트가 있다고 생각합니다. 당신은 그것을 테스트 할 수 있습니다
if '\0' in open('input.csv').read():
print "you have null bytes in your input file"
else:
print "you don't"
그렇게한다면
reader = csv.reader(x.replace('\0', '') for x in mycsv)
주위를 둘러 볼 수 있습니다. 또는 .csv 파일에 utf16 또는 ‘흥미로운’무언가가 있음을 나타낼 수 있습니다.
답변
null을 다른 것으로 바꾸려면 다음을 수행하십시오.
def fix_nulls(s):
for line in s:
yield line.replace('\0', ' ')
r = csv.reader(fix_nulls(open(...)))
답변
null 값이 존재하지 않는 척하고 싶다면 생성기를 인라인하여 null 값을 필터링 할 수 있습니다. 물론 이것은 null 바이트가 실제로 인코딩의 일부가 아니며 실제로 일종의 잘못된 아티팩트 또는 버그라고 가정합니다.
(line.replace('\0','') for line in f)
아래를 참조하십시오. 또한 mode를 사용하여 해당 파일을 열고 싶을 것입니다 rb
.
import csv
lines = []
with open('output.txt','r') as f:
for line in f.readlines():
lines.append(line[:-1])
with open('corrected.csv','w') as correct:
writer = csv.writer(correct, dialect = 'excel')
with open('input.csv', 'rb') as mycsv:
reader = csv.reader( (line.replace('\0','') for line in mycsv) )
for row in reader:
if row[0] not in lines:
writer.writerow(row)
답변
이것은 어떤 라인이 문제인지 알려줄 것입니다.
import csv
lines = []
with open('output.txt','r') as f:
for line in f.readlines():
lines.append(line[:-1])
with open('corrected.csv','w') as correct:
writer = csv.writer(correct, dialect = 'excel')
with open('input.csv', 'r') as mycsv:
reader = csv.reader(mycsv)
try:
for i, row in enumerate(reader):
if row[0] not in lines:
writer.writerow(row)
except csv.Error:
print('csv choked on line %s' % (i+1))
raise
아마도 daniweb의 이것이 도움이 될 것입니다.
csv 파일에서 읽을 때 “Runtime Error! line contains NULL byte”라는 오류가 발생합니다. 이 오류의 근본 원인에 대해 아십니까?
…
좋아, 나는 그것을 얻었고 해결책을 게시 할 것이라고 생각했다. 단순히 슬프게 만들었습니다 … 사용 된 파일이 .csv 대신 .xls 형식으로 저장되었습니다. 파일 이름 자체에 .csv 확장자가 있고 유형은 여전히 .xls이기 때문에이를 인식하지 못했습니다.
답변
까다로운 방법 :
Lunux에서 개발하면 sed의 모든 기능을 사용할 수 있습니다 .
from subprocess import check_call, CalledProcessError
PATH_TO_FILE = '/home/user/some/path/to/file.csv'
try:
check_call("sed -i -e 's|\\x0||g' {}".format(PATH_TO_FILE), shell=True)
except CalledProcessError as err:
print(err)
대용량 파일을위한 가장 효율적인 솔루션입니다.
Python3, Kubuntu 확인
답변
최근에이 문제를 해결했으며 제 경우에는 읽으려고했던 압축 된 파일이었습니다. 먼저 파일 형식을 확인하십시오. 그런 다음 내용이 확장이 참조하는 내용인지 확인하십시오.