【问题标题】:Unexpected type error when export data from table to text file将数据从表导出到文本文件时出现意外的类型错误
【发布时间】:2018-06-07 08:04:51
【问题描述】:

我正在尝试将表中的数据导出到 txt 文件。我的代码如下

class Optimization_goolge(object):
    def __init__(self):
        self.dbname = ""
        self.usr_name = ""
        self.usr_pass = ""
        self.con = ""
        self.cur = ""
        self.openTime=""

    def vT(self, x, y, z, openTime):
        try:
            con_string="dbname = '%s' user = '%s' password ='%s' host = 'localhost'"%(x,y,z)
            con = psycopg2.connect(con_string)
            con.set_isolation_level(0)
            cur = con.cursor()

            cur.execute(("""COPY (select source, target, sum(cost)/1000 as cost from distance_matrix where source != 88888888 and target
             != 88888888 group by source, target order by source) TO '%s\\vrp_distance.txt'""") % (os.getcwd()))
            con.commit()

但我遇到了错误

error vT Function could not open file "D:\working_copy\vrp_distance.txt" for writing: No such file or directory

Error optimizeFxn_google arguments did not match any overloaded call:
  QMessageBox.warning(QWidget, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton): argument 1 has unexpected type 'Optimization_goolge'
  QMessageBox.warning(QWidget, QString, QString, int, int, int button2=0): argument 1 has unexpected type 'Optimization_goolge'
  QMessageBox.warning(QWidget, QString, QString, QString, QString button1Text=QString(), QString button2Text=QString(), int defaultButtonNumber=0, int escapeButtonNumber=-1): argument 1 has unexpected type 'Optimization_goolge'

【问题讨论】:

  • 因为它来自getcwd() 我猜该目录存在。你有写权限吗?此外,您应该使用os.path.join() 加入路径而不是手动方式。您还可以使用.format() 来增加可读性。
  • @mikuszefski 是的目录和文件确实存在。如何使用格式()。可以举个例子吗
  • 看看下面的答案

标签: python postgresql python-2.7 pyqt4


【解决方案1】:

试试:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))
filepath = os.path.join(dir_path, 'vrp_distance.txt')

sql_statement = ("COPY (select source, target, sum(cost)/1000" 
" as cost from distance_matrix where source != 88888888 and target"
" != 88888888 group by source, target order by source) TO"
" '{}'".format(filepath))

要考虑的旁注(不在原始问题中):

  • 为什么不分离提取信息并将其写入文件的职责 - 你会知道哪个部分失败了
  • OptimizationGoolge,按照惯例
  • 如果你用空字符串初始化一个类,那么类设计就有问题
  • vT 重命名为有意义的名称

你也要检查一下:

assert os.path.exists('D:/working_copy/vrp_distance.txt') 
assert os.path.exists('D:/working_copy')

同时检查Save PL/pgSQL output from PostgreSQL to a CSV file。如果您没有写作许可,以上所有内容都是徒劳的。

【讨论】:

  • 是的,您的代码可以删除所有错误,这些错误会带回我的相同错误错误 vT 函数无法打开文件“D:\working_copy\vrp_distance.txt”进行写入:没有这样的文件或目录跨度>
  • 文件路径的结果是 D:\working_copy\vrp_distance.txt
  • 断言通过了吗? @user1687891
  • 我认为多行字符串需要一个反斜杠行继续。
  • ... 按照惯例,您指的是 PEP8?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2023-02-10
  • 2018-07-04
  • 2021-12-22
相关资源
最近更新 更多