簡體   English   中英

在Python中從csv編寫xlsx文件

[英]writing xlsx file from csv in python

這是我的代碼,該代碼從doc Excel文件加載電子表格並創建了csvTranslations.csv,transitions.py和translations.xlsx。 問題是它正在創建一個空白的translattions.xlsx文件,但我不知道我在做什么錯。

import os
import random
import re
import csv
import requests
import io
import sys
import copy
import xlrd
import codecs
import time
import xlrd
from collections import OrderedDict
import simplejson as json
import xlsxwriter
from pandas.io.excel import ExcelWriter
import pandas
import openpyxl
from openpyxl import Workbook
from openpyxl.utils  import get_column_letter
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

將被調用的功能

def gen_translations():
    try:
        import xlrd
    except:
        print "Missing xlrd module!"
        return
    #return
    csv_file = 'translations.xlsx'
    if not os.path.exists(csv_file):
        print "Unable to update translations due to missing csv file!"
        return

    print "updating translations..."
    o = open("translations.py", "wb")

鏈接到Google文檔

url = "https://docs.google.com/spreadsheets/d/1g3nk_yzQxQFSxPN2lCvWwiHH8MgAqhpu5S763FRD_5I/gviz/tq?tqx=out:csv&sheet=translations"
    r = requests.get(url, verify=False)

    ow = io.open("csvTranslations.csv", "wb")

    ow.write(r.content)

    ow.close()



    try:
        print >> o, header
    except:
        print >> o, "#CANNOT PRINT HEADER:%s" % repr(header)

    with open("csvTranslations.csv", "rb") as csvfile:
        docreader = csv.reader(csvfile)
        headers = next(docreader)
        for row in docreader:
            decoded_row = [entry.decode("utf8") for entry in row]
            decoded_row[6] = translate(decoded_row[2], to_X)

            try:
                id = int(decoded_row[0])
            except:
                break
            keyword = decoded_row[1]
            languages = decoded_row[2:]
            '''
            try:
                print u" ; ".join(languages)
            except:
                print "#CANNOT PRINT:%s"%repr(languages)
            '''
            try:
                print >> o, "    %s = Word(%d, %s)" % (keyword, id, languages)
            except:
                print >> "ERROR: CANNOT PRINT %s = Word(%d,%s)" % (repr(keyword), id, repr(languages))
        try:
            print >> o, footer
        except:
            print >> o, "#ERROR CANNOT PRINT FOOTER:%s" % repr(footer)
        o.close()
        print "done!"

似乎問題出在這里,因為同時編寫了csvTranslations和translations.py,但不是translations.xlsx

        csv.register_dialect('colons', delimiter=',')

        reader = csv.reader(csvfile, dialect='colons')

        wb = Workbook()
        dest_filename = r"translations.xlsx"

        ws = wb.worksheets[0]

        for row_index, row in enumerate(reader):
            for column_index, cell in enumerate(row):
                column_letter = get_column_letter((column_index + 1))
                ws['%s%s'%(column_letter, (row_index + 1))].value = cell

        wb.save(filename=dest_filename)

您似乎要嘗試通讀兩次“ csvTranslations.csv”,但您只打開了一次文件。 因此,一旦腳本完成讀取以寫入translations.py的操作, 指向 csvTranslations.csv的文件指針現在位於文件的末尾,並且進一步嘗試從csvfile讀取的操作均不會返回任何數據(相反,它們表示“您已經在文件末尾了!”,導致在for row_index, row in enumerate(reader):處的循環出現,退出for row_index, row in enumerate(reader):中的行。)解決此問題的最簡單方法是在第二次打開csvTranslations.csv之前到行reader = csv.reader(csvfile, dialect='colons') ; 這為您提供了一個指向文件的新指針,該指針從頭開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM