我尝试使用Basemap包来绘制PyCharm的地图,但是我遇到了问题
from mpl_toolkits.basemap import Basemap`
Run Code Online (Sandbox Code Playgroud)
跟踪追溯如下:
Traceback (most recent call last):
File "/Users/yupeipei/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-4-0a24a3a77efd>", line 7, in <module>
from mpl_toolkits.basemap import Basemap
File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 20, in do_import
module = self._system_import(name, *args, **kwargs)
File "/Users/yupeipei/anaconda3/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 146, in <module>
pyproj_datadir = os.environ['PROJ_LIB']
File "/Users/yupeipei/anaconda3/lib/python3.6/os.py", line 669, in __ getitem__
raise KeyError(key) from None
KeyError: 'PROJ_LIB'
Run Code Online (Sandbox Code Playgroud)
我对PyCharm上的这个错误感到困惑,因为相同的脚本在Jupyter或Spyder上运行正常!PyCharm的环境是../anaconda3/lib/python3.6,其中与anaconda相同.
有没有人遇到过这个错误?
任何人都可以帮我解决这个错误吗?
我的代码有效,但我想知道是否有更多的pythonic方法来做到这一点.我有一本字典,我想看看是否:
因此,在我的代码中,"a","b"和"c"的键将成功,这是正确的.
import re
mydict = {
"a":"alpha",
"b":0,
"c":False,
"d":None,
"e":"",
"g":" ",
}
#a,b,c should succeed
for k in mydict.keys():
if k in mydict and mydict[k] is not None and not re.search("^\s*$", str(mydict[k])):
print(k)
else:
print("I am incomplete and sad")
Run Code Online (Sandbox Code Playgroud)
我上面所做的工作,但这似乎是一个非常长的条件.也许这只是正确的解决方案,但我想知道是否有更多的pythonic"存在且有东西"或更好的方法来做到这一点?
更新 感谢大家的精彩回答和深思熟虑的评论.有了一些要点和提示,我已经更新了一些问题,因为我没有的条件也应该成功.我还将示例更改为循环(更容易测试吗?).
def fancymatching(fname1, fname2):
#This function will do much smarter and fancy kinds of compares
if (fname1 == fname2):
return 1
else:
return 0
personlist = [
{
'pid':'1',
'fname':'john',
'mname':'a',
'lname':'smyth',
},{
'pid':'2',
'fname':'john',
'mnane':'a',
'lname':'smith',
},{
'pid':'3',
'fname':'bob',
'mname':'b',
'lname':'nope',
}
]
for person1 in personlist:
for person2 in personlist:
if person1['pid'] >= person2['pid']:
#don't check yourself, or ones that have been
continue
if fancymatching(person1['fname'], person2['fname']):
print (person1['pid'] + " matched " + person2['pid'])
Run Code Online (Sandbox Code Playgroud)
我正在努力改进上述代码的想法.它可以工作,但如果personlist变得非常大(比如数百万),我觉得必须有比2更快的东西.
代码正在做的是获取字典列表并对每个字典的值与每个其他字典运行奇特的模糊匹配函数.所以它并不像将所有词典与其他词典进行比较那么简单.我想要一种在每个字典上运行一个函数的方法,也许2个for循环是正确的方法吗?任何的意见都将会有帮助!
这应该很容易,但是我只是缺少一些东西。我有以下几点:
IF OBJECT_ID('LAST_NM') IS NOT NULL
DROP TABLE LAST_NM
CREATE TABLE LAST_NM (
ID int NOT NULL IDENTITY(1,1),
LAST_NM_ORIGINAL varchar(255) NOT NULL,
LAST_NM_1 varchar(255)NULL,
LAST_NM_2 varchar(255)NULL,
LAST_NM_3 varchar(255)NULL,
LAST_NM_4 varchar(255)NULL,
PRIMARY KEY (ID)
);
INSERT INTO LAST_NM
(LAST_NM_ORIGINAL, LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)
VALUES
('SMITH', 'HARRIS', NULL, 'HARRIS', NULL),
('JONES', 'FUTURE', 'FUTURE', 'FUTURE', 'FUTURE'),
('SMITH', 'ALPHA', 'ALPHA', 'ALPHA', NULL),
('SMITH', 'BETA', 'BETA', 'GEORGE', NULL),
('SMITH', 'SMITH', NULL, 'SMITH', NULL),
('DOPE', NULL, NULL, NULL, 'CURLS')
Run Code Online (Sandbox Code Playgroud)
我想做的是SELECT从此表中:
IS NOT NULL …我有一套相当简单的要求.我有一个列表(长度为200万)的对象,每个对象都有2个需要重新编码的属性(其他属性不会更改)
ZERO ONE TWO ... TEN的值需要更改为其数值:1 2 ... 10
例子:
ONE MAIN STREET -> 1 MAIN STREET
BONE ROAD -> BONE ROAD
BUILDING TWO, THREE MAIN ROAD -> BUILDING 2, 3 MAIN ROAD
ELEVEN MAIN ST -> ELEVEN MAIN STREET
ONE HUNDRED FUNTOWN -> 1 HUNDRED FUNTOWN
Run Code Online (Sandbox Code Playgroud)
显然有些数字不会改变,有些数字很奇怪. 完全可以预料到的
我可以用下面的内容来完成所有工作.我的问题是,是否有一种聪明的方法可以使这一切运行得更快?我想过做一个中list的dictionaries密钥是字号码和值是数字,但我不认为这将有利于性能.或者re.compile每个正则表达式并将它们传递给这个函数?有什么聪明的想法让这个运行得更快?
def update_word_to_numeric(entrylist):
updated_entrylist = []
for theentry in entrylist:
theentry.addr_ln_1 = re.sub(r"\bZERO\b", "0", theentry.addr_ln_1)
theentry.addr_ln_1 = re.sub(r"\bONE\b", "1", theentry.addr_ln_1)
theentry.addr_ln_1 = re.sub(r"\bTWO\b", "2", theentry.addr_ln_1) …Run Code Online (Sandbox Code Playgroud) 我正在运行一系列针对数据块的正则表达式.我们最近从Activestate perl 5.8 32bit(我知道......非常老!)升级到perl 5.16 64bit.所有硬件保持不变(窗口).
我们注意到性能受到影响,因为我们的解析循环需要大约2.5秒,现在大约需要5秒.任何人都可以给我一个暗示会导致变化的提示吗?我期待性能的提高,因为我的理解是引擎有了很大的改进,任何关于我应该做的事情的文档都会非常感激.
我有一些Python 3代码,可以使它使用模块slackclient发布到频道,没问题。但是,如果我从所有流量都需要通过代理的公司服务器中运行此代码,它将失败。我知道代理服务器和端口,必须使用它们从我们的服务器运行pip,如下所示:
pip install --proxy proxy.evilcorp.com:8080 slackclient
Run Code Online (Sandbox Code Playgroud)
效果很好。如果我不使用代理,则无法按预期连接。所以这告诉我,我只需要弄清楚如何获取我的slackclient代码以使用代理,但是如何呢?这是我的代码:
from slackclient import SlackClient
def get_slackclient():
token = "blah-blah-token"
sc = SlackClient(token)
return sc
def post_slackmessage(username,channel,text):
sc = get_slackclient()
try:
sc.api_call("chat.postMessage",channel=channel,text=text,username=username,unfurl_links="true")
except:
print ("failed to post messaage to slack")
post_slackmessage("test_slack", "test", "hurrah it posted")
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚放置代理设置的位置,我肯定缺少一些简单的东西。我乐于接受其他开箱即用的想法,以使所有这些工作正常进行,但是我真的不能在服务器上安装任何东西以使所有流量都通过代理或更改代理设置。
我想打印像这样编码的字符串:"Cze\u00c5\u009b\u00c4\u0087"但我不知道怎么做.示例字符串应打印为:"Cześć".
我试过的是:
str = "Cze\u00c5\u009b\u00c4\u0087"
print(str)
#gives: CzeÅÄ
str_bytes = str.encode("unicode_escape")
print(str_bytes)
#gives: b'Cze\\xc5\\x9b\\xc4\\x87'
str = str_bytes.decode("utf8")
print(str)
#gives: Cze\xc5\x9b\xc4\x87
Run Code Online (Sandbox Code Playgroud)
哪里
print(b"Cze\xc5\x9b\xc4\x87".decode("utf8"))
Run Code Online (Sandbox Code Playgroud)
给出"Cześć",但我不知道如何将"Cze\xc5\x9b\xc4\x87"字符串转换为b"Cze\xc5\x9b\xc4\x87"字节.
我也知道在使用"unicode_escape"参数编码基础字符串后,问题是字节表示中的额外反斜杠,但我不知道如何摆脱它们 - str_bytes.replace(b'\\\\', b'\\')不起作用.
我有这些列表包含RGB格式的蓝色值.
low = [
[0, 0, 128],
[65, 105, 225],
[70, 130, 180],
[72, 61, 139],
[83, 104, 120]
]
Run Code Online (Sandbox Code Playgroud)
我想要做的是:将所有值从例如第一个列表从RGB转换为HSV.
我做了这个代码:
import cv2
import numpy as np
for v in low:
rgb = np.uint8([[v]])
print("RGB: ", rgb)
hsv = cv2.cvtColor(rgb, cv2.COLOR_RGB2HSV)
print("HSV: ", hsv)
print("\n")
Run Code Online (Sandbox Code Playgroud)
问题是当我去检查颜色(RGB-HSV)是否相同时.在这里,我发现它不是.
我们从low列表中取最后一个值.
RGB: [[[ 83 104 120]]]
HSV: [[[103 79 120]]]
Run Code Online (Sandbox Code Playgroud)
RGB是RGB输入值,输出HSV.但最后一个它与RGB的颜色不同.首先是蓝色的阴影,最后是绿色.为什么?
我用这个工具来检查值.它还说这个RGB的正确HSV应该是205, 30, 47.
我的错误在哪里?
这对某个问题来说有点愚蠢.我有一个简单的清单:
my_list = ["apple", "orange", "car"]
Run Code Online (Sandbox Code Playgroud)
我想为该列表的长度运行一个循环,但我不需要列表中的任何内容.我可以清楚地做到这一点:
for item in my_list:
call_external_thingy()
Run Code Online (Sandbox Code Playgroud)
哪个会循环3次,完美.但是,我从来没有item在我的for循环中使用.所以虽然这确实有效,但每当我看到我的代码时,我觉得我犯了一个错误,"哦,拍摄,我没有传入item..哦,我只需要运行该命令的项目数量列表..."
如果没有创建,只需为列表中的项目数运行for循环,就会有更多的pythonic方法item.我正在考虑len或者range不能理解它的东西,我模拟的任何东西看起来都像是一团糟.
请注意,我很想把它放在codereview上,但他们通常需要所有的代码和很多原因.这似乎是一个简单的问题,但我可能是错的!
谢谢!
python ×8
python-3.x ×5
performance ×3
dictionary ×2
regex ×2
activestate ×1
for-loop ×1
list ×1
opencv ×1
perl ×1
proxy ×1
pycharm ×1
python-3.6 ×1
rgb ×1
slack ×1
slack-api ×1
sql-server ×1
windows ×1