python으로 Excel 호환 CSV 파일을 생성하시겠습니까?
저는 진정으로 엑셀과 호환되는 파이썬을 사용하여 csv 파일을 만들려고 합니다(저는 엑셀 2007을 사용하고 있습니다, 만약 그것이 차이가 있다면).
여기 제가 하려는 일이 있습니다.
import csv
data = [ ['9-1', '9-2', '9-3'] ]
fd = open('test.csv', 'wb')
try:
writer = csv.writer(fd, dialect='excel', quotechar='"', quoting=csv.QUOTE_ALL)
writer.writerows(data)
finally:
fd.close()
그러면 다음이 포함된 csv 파일이 생성됩니다.
"9-1","9-2","9-3"
Excel로 로드하면 다음과 같은 열이 표시됩니다.
09-Jan 09-Feb 09-Mar
[아저씨, 엑셀 감사합니다.정말로, 인용의 의미는 무엇입니까?]
이제, 저는 다른 곳에서 읽었습니다. 엑셀이 문자열을 리터럴로 처리하려면 문자열 앞에 동등한 기호가 붙어야 합니다.="Like This"그래서 제가 정말로 만들고 싶은 것은:
="9-1",="9-2",="9-3"
이것을 할 수 있는 방법이 있습니까?csv파이썬의 모듈?사용자 지정 방언을 만드는 작업이 포함될 것으로 예상되지만 원하는 결과를 얻을 수 있는 변수는 보이지 않습니다.
만약 당신의 목적이 단지 엑셀에 표로 목록을 작성하는 것이라면.아래 샘플을 사용해 볼 수 있습니다. 여기서 ";" 및 방언='slam-tab' 속성을 사용하면 열을 전환할 수 있습니다.
import csv
RESULTS = [
['val_col1;','val_col2;','val_col3']
]
resultFile = open("testExcel.csv",'wb')
resultWriter= csv.writer(resultFile, dialect='excel-tab')
resultWriter.writerows(RESULTS)
FWIW, Excel 2007은 자체적으로 호환되지도 않습니다.빈 스프레드시트에 9-1을 입력하면 셀에서 나가는 즉시 1-Sep로 변환됩니다.셀 형식을 일반에서 텍스트로 변경하면 변경되지 않은 문자열 리터럴을 입력하여 .csv 파일로 저장할 수 있지만 동일한 파일을 빈 스프레드시트(일반 형식 포함)로 읽으면 날짜로 다시 변환됩니다.
Excel은 다음과 같이 파일을 저장합니다.
9-1,9-2,9-3
따옴표 없이 "=" 기호 없이 사용할 수 있습니다.csv 파일을 읽기 전에 셀 형식을 텍스트로 설정해도 작동하지 않습니다. 3개의 셀을 사용자 지정 형식으로 날짜(표시 값 1-Sep, 셀 값 9/1/2011)로 가져오고 나머지 셀은 일반으로 변환됩니다.
편집: 다음을 포함하는 csv 파일:
"9-1",'9-2',='9-3',=''9-4''
스프레드시트에 다음과 같이 표시됩니다.
1-Sep '9-2' ='9-3' ="9-4"
그래서 그=아무 도움이 되지 않지만 적어도 작은 따옴표는 따옴표가 보존된 문자열 리터럴을 얻습니다.Excel에 더 정통한 사람은 인용문을 없애는 데 도움을 주어야 합니다. "값 붙여넣기"는 인용문을 제거하지 않습니다.
문제는 Excel의 CSV 임포터를 사용하여 CSV 파일을 Excel로 가져오는 것입니다.반직관적이긴 하지만 그런 식으로 CSV 파일을 가져오면 안 됩니다.대신 텍스트 파일로 가져옵니다(즉, 이름에 다음 문자가 포함됨).txt내선 번호).그러면 각 열의 유형을 지정할 수 있으며 Excel 날짜처럼 보이는 열에 대해 텍스트를 적절하게 선택할 수 있습니다.
턴키 "Excel에서 열 수 있는 파일이 있습니다" 접근 방식을 찾고 있다면 xlwt(원래 권장 사항 pyX가 아님)를 사용해 보십시오.LWriter)를 사용하여 CSV를 완전히 방지합니다.
네, 그동안 도와주셔서 감사합니다, 대략적인 해결책을 생각해내서 여기서 공유하려고 했습니다.
가장 예쁜 해결책은 아니지만 제 목적에 맞는 방법입니다.하지만 경고:줄에 따옴표가 있으면 끊어집니다!
import csv
import re
data = [ ['9-1', '9-2', '9-3'] ]
def quoteCsvData(data):
for x, row in enumerate(data):
for y, item in enumerate(row):
if data[x][y] != '':
data[x][y] = r'="' + data[x][y] + r'"'
return data
def unquoteCsvData(data):
for x, row in enumerate(data):
for y, item in enumerate(row):
if data[x][y] != '':
m = re.match(r'="([^"]*)"',data[x][y])
if m:
data[x][y] = m.group(1)
return data
fd = open('test2.csv', 'wb')
data = quoteCsvData(data)
try:
writer = csv.writer(fd, delimiter=',',
quotechar='|',
quoting=csv.QUOTE_NONE,
escapechar='\\')
writer.writerows(data)
finally:
fd.close()
fd = open('test2.csv', 'rb')
try:
reader = csv.reader(fd, delimiter=',',
quotechar='|',
quoting=csv.QUOTE_NONE,
escapechar='\\')
data = []
for row in reader:
data.append(row)
finally:
fd.close()
data = unquoteCsvData(data)
print data
업데이트: 많은 수가 있는 빈 셀의 스팸을 제거했습니다.=""
data = [ ['9-1', '9-2', '9-3'] ]
fd = open('test.csv', 'wb')
for row in data:
for x in row:
fd.write('="{}",'.format(x))
fd.write('\n')
시도:
dialect=csv.excel
에 있어서와 같이
import csv
csv.excel
- line terminator '\r\n'
- 초기 공백 건너뛰기 False
- 견적 0.
- 구분 기호 ','
- 따옴표 char ' "
- 이중 따옴표 참
저에게는 코드를 읽으러 갈 만큼 저를 괴롭힌 적이 없는 약간의 흑인 예술이지만, 제가 한 작은 실험은 항상 위의 형식으로 충분히 잘 행동할 수 있도록 탁월했습니다(2003).
언급URL : https://stackoverflow.com/questions/8124606/create-excel-compatible-csv-file-with-python
'programing' 카테고리의 다른 글
| XLSM을 CSV로 저장하는 동안 "method save as as as as of object _workbook failed" 오류가 발생했습니다. (0) | 2023.08.19 |
|---|---|
| 전화 간격을 사용하여 바코드를 스캔하는 방법 (0) | 2023.08.19 |
| jQuery AJAX를 사용하는 서버에 null을 전달할 수 없습니다.서버에서 수신된 값이 "null" 문자열입니다. (0) | 2023.08.19 |
| 장애가 발생한 도커 빌드의 파일 시스템을 검사하려면 어떻게 해야 합니까? (0) | 2023.08.19 |
| 'git credential-osxkeychain'에 저장된 자격 증명을 어떻게 재설정합니까? (0) | 2023.08.19 |