首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中从csv写入xlsx文件

在python中从csv写入xlsx文件
EN

Stack Overflow用户
提问于 2018-07-14 04:58:12
回答 1查看 67关注 0票数 0

这是我的代码,它从文档excel文件中加载电子表格,并创建一个csvTranslations.csv,translations.py和translations.xlsx。问题是它创建了一个空白的translattions.xlsx文件,而我不知道我做错了什么。

代码语言:javascript
复制
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

将要调用的函数

代码语言:javascript
复制
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")

指向谷歌文档的

链接

代码语言:javascript
复制
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不是

代码语言:javascript
复制
        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)
EN

回答 1

Stack Overflow用户

发布于 2018-07-14 05:44:12

看起来你试图把"csvTranslations.csv“通读两遍,但是你只打开了文件一次。因此,一旦您的脚本完成读取以写入translations.py,指向csvTranslations.csv的文件指针现在位于文件的末尾,进一步尝试从csvfile读取不会返回任何数据(相反,它们指示“您已经在文件的末尾!”,从而导致您在for row_index, row in enumerate(reader):处的循环退出。)解决这个问题的最简单方法是在reader = csv.reader(csvfile, dialect='colons')行之前第二次打开csvTranslations.csv;这会给您一个指向文件的新指针,这个指针回到了开头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51332723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档