小编Bre*_*arn的帖子

从另一个python程序运行python程序(有一定的要求)

假设我有两个python脚本A.pyB.py.我正在寻找一种方法从A中运行B,方式是:

  1. B认为它是__main__(因此if __name__=="__main__"B 中的块中的代码将运行)
  2. B实际上不是__main__(所以它不会,例如,覆盖"__main__"sys.modules中的条目)
  3. B中引发的异常传播到A(即,可以用exceptA中的条款捕获).
  4. 这些异常(如果未捕获)会在B中生成正确的回溯引用行号.

我尝试了各种技术,但似乎都没有满足我的所有要求.

  • 使用子进程模块中的工具意味着B中的异常不会传播到A.
  • execfile("B.py", {}) 运行B,但它不认为它是主要的.
  • execfile("B.py", {'__name__': '__main__'})让B.py认为它是主要的,但它似乎也搞砸了异常回溯打印,因此回溯指的是A中的线(即真实的__main__).
  • 使用imp.load_sourcewith __main__作为名称几乎可以工作,除了它实际上修改了sys.modules,从而踩到了现有的值__main__

有什么方法可以得到我想要的东西吗?

(我这样做的原因是因为我正在对现有的库进行一些清理.这个库没有真正的测试套件,只有一组产生特定输出的"示例"脚本.我试图利用它们作为测试以确保我的清理不会影响库执行这些示例的能力,因此我想从我的测试套件中运行每个示例脚本.我希望能够在测试脚本中看到这些脚本的异常,以便测试脚本可以报告失败的类型,而不是仅在示例脚本引发某些异常时报告通用的SubprocessError.)

python subprocess python-import execfile

5
推荐指数
1
解决办法
634
查看次数

是否等效于Series.map for DataFrame?

通过使用Series.mapSeries参数,我可以获取Series的元素并将其用作另一个Series的索引。我想对DataFrame的某些列执行相同的操作,将每一行用作MultiIndex-ed系列中的一组索引级别。这是一个例子:

>>> d = pandas.DataFrame([["A", 1], ["B", 2], ["C", 3]], columns=["X", "Y"])
>>> d
   X  Y
0  A  1
1  B  2
2  C  3

[3 rows x 2 columns]
>>> s = pandas.Series(np.arange(9), index=pandas.MultiIndex.from_product([["A", "B", "C"], [1, 2, 3]]))
>>> s
A  1    0
   2    1
   3    2
B  1    3
   2    4
   3    5
C  1    6
   2    7
   3    8
dtype: int32
Run Code Online (Sandbox Code Playgroud)

我想做的是d.map(s),因此每行d都应作为一个元组,用于索引的MultiIndex s。也就是说,我想要与此相同的结果:

>>> s.ix[[("A", 1), ("B", 2), ("C", …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
601
查看次数

如何在 sympy 中使用常量 LETTER?

我想打印e**4*x. 我想要 Python 给我4*e**4x. 相反,它给了我 4 倍的 E 值。我如何才能同情将 e 显示为字母常量。

谢谢

python sympy

5
推荐指数
1
解决办法
4839
查看次数

获取任何 QKeyEvent 键值的可打印名称

我正在使用 PyQt5。当我编写 keyPressEvent 处理程序时,为了调试目的,我希望能够打印一个人类可读的按键被按下的描述。我希望无论如何都能打印这样的东西,无论在事件中按下了多少键,或者它们是修饰符还是“常规”键。

我已经看到了上一个问题,其中接受的答案(使用 C++)建议创建一个 QKeySequence 并使用它的.toString方法。我可以这样做:

def keyPressEvent(self, event):
    print("got a key event of ", QKeySequence(event.key()).toString())
Run Code Online (Sandbox Code Playgroud)

但是,这并不总是有效。例如,如果我按下 Shift 键,当我尝试输出(或者如果我尝试将其编码为 UTF-8)时会导致编码错误。这似乎是因为 QKeySequence 不适用于隔离的修饰键:

>>> QKeySequence(Qt.Key_Shift).toString().encode('unicode-escape')
b'\\u17c0\\udc20'
Run Code Online (Sandbox Code Playgroud)

它给出了胡言乱语,而不是我所期望的,即“Shift”。如果我使用它Qt.SHIFT(有点,因为它提供“Shift+”),它会起作用,但这没有用,因为如果我按下 Shift 键,这Qt.SHIFT不是我得到的event.key()

我怎样才能获得Qt来给我的可打印表示事情可能永远是价值event.key(),这里event是一个QKeyEvent?

python qt pyqt keyboard-events pyqt5

5
推荐指数
1
解决办法
2672
查看次数

QFont.toString() 的格式是否有文档记录和/或跨 Qt 版本稳定?

文档QFont.toString说它返回“以逗号分隔的属性列表”,但它没有指定“这些”属性是什么或它们的顺序是什么。 (编辑:文档已更新,因此现在明确列出属性及其顺序。) 我发现了一个老问题,其答案说属性是:

字体系列、pointSizeF、pixelSize、、、、、QFont::StyleHint下划线、strikeOut、fixedPitch、rawModeQFont::WeightQFont::Style

但我找不到此信息的任何权威来源(而且该答案已有 10 多年历史,并且是关于 Qt4 的)。

是否有关于 的格式的明确文档QFont.toString(),包括它代表哪些属性以及它们的顺序?假设保存这样的字符串并稍后QFont.fromString()在不同版本的 Qt 上使用它会起作用,这是否合理?

fonts qt qfont

5
推荐指数
1
解决办法
843
查看次数

'return'关键字只返回循环中的一个元素?

我有一个简单的函数来读取csv文件并从中提取第一个coloum:

import csv 

def pass_username():
    with open('test.csv', 'r') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
        for row in spamreader:
            return row[0]
Run Code Online (Sandbox Code Playgroud)

当我将此函数称为:

a = pass_username()
print a 
Run Code Online (Sandbox Code Playgroud)

这只打印第一个元素.但是,当我returnprintas 替换word print row[0]并调用函数时,pass_username()它会打印所有元素.我想将该函数分配给变量,因此我想使用return.怎么解决?

test.csv的内容:

"test@gmail.com","rockon"
"hello@gmail.com","hey"
"hithere@gmail.com","ok"
"hellosir@gmail.com","password"
Run Code Online (Sandbox Code Playgroud)

python return

4
推荐指数
1
解决办法
2185
查看次数

给d3序轴标签与刻度名称不同

我有一个序列,scale其中包含不同值的某些标签.我想显示该刻度的轴,其中轴标签与刻度标签不同.我有这个代码:

var width = 1000
var height = 600
var margins = {
left: 100, // 40
right: 25,
bottom: 50,
top: 0
}

var y = d3.scale.ordinal().domain(["This", "That", "Other"]).rangePoints([margins.top, height-margins.bottom], 1);

var svg = d3.select("#plot").append("svg").attr("width",width).attr("height",height)

var yAxis = d3.svg.axis()
  .scale(y)
  .orient("left")
  .tickValues(["This is long", "That is long", "Other is long"])

svg.append("g")
  .attr("class", "axis")
  .attr("transform", "translate(" + margins.left + ",0)")
  .classed("yaxis", true)
  .call(yAxis);
Run Code Online (Sandbox Code Playgroud)

这曾经起作用,但显然在最近几个月d3发生了一些变化,导致它不再起作用.(另一个问题也说我应该可以这样使用tickValues.)不会出现刻度标签.我在JavaScript控制台中收到错误消息:

Unexpected value translate(0,NaN) parsing transform attribute. @ http://d3js.org/d3.v3.js:596
Run Code Online (Sandbox Code Playgroud)

跟踪代码,似乎d3试图在每个tick值上调用scale; 也就是说,它正在调用 …

javascript d3.js

4
推荐指数
1
解决办法
4213
查看次数

使变量可以访问任何其他模块

我是Python的新用户,我一直关注这个网页,它对我帮助很大.此时我正在尝试解决无法从其他模块访问的变量问题.

Modelu1.py
Texto = ' string'
textoMayus = texto.upper()

print textoMayus 

cadena = textoMayus.split () 

moduel2.py
import entrada
size = len(cadena)
Run Code Online (Sandbox Code Playgroud)

当我运行moduel2.py python时给出了这个错误:NameError:name'cadena'未定义

如何声明变量taht可以从任何其他模块访问...

谢谢!!

python

3
推荐指数
1
解决办法
69
查看次数

如何使用 python 拆分 CSV 文件中的合并单元格

有没有办法使用 python 拆分/取消合并 CSV 文件中的单元格?我想要的解释如下 -

在此输入图像描述

结果应该是一个包含以下条目的新 CSV 文件 -

在此输入图像描述

文本版本看起来有点像这样:

Column1,Column2,Column3,Column4,Column5,
A,A1,A11,A111,A1111,
B,B1,B11,B111,B1111,
,,,,B1112,
,,,,B1113,
,,,,B1114,
,,,,,
,,,,,


Column1,Column2,Column3,Column4,Column5,
A,A1,A11,A111,A1111,
B,B1,B11,B111,B1111,
B,B1,B11,B111,B1112,
B,B1,B11,B111,B1113,
B,B1,B11,B111,B1114,
,,,,,
Run Code Online (Sandbox Code Playgroud)

我知道有一个解决方案可以取消合并 Excel 工作簿,但我还没有找到对 CSV 文件执行此操作的方法。任何帮助将不胜感激。

python csv split

3
推荐指数
1
解决办法
2076
查看次数

使用 Psycopg2 获得懒惰但可重复使用的光标

我在文档中看到您需要使用服务器端(“命名”)游标以避免一次将所有结果加载到内存中。但后来我发现服务器端游标不可重用。.execute你只能对它们做一个。(否则你会得到ProgrammingError: can't call .execute() on named cursors more than once。)

有什么方法可以获得可以重复使用的游标,但也不会立即将所有数据加载到内存中?

我愿意使用不同的 Postgres 驱动程序,如果它能让事情变得更简单、性能更高。我查看了 PyGreSQL,但它似乎比 Postgres 命名游标慢得多。

python postgresql psycopg2 pygresql

3
推荐指数
1
解决办法
4244
查看次数