我偶然发现了一些奇怪的行为,ipython-notebook并想知道目的是什么。如果在函数调用之前输入分号,则会得到将函数应用到反映函数名称后的所有代码的字符串的结果。例如,如果我;list('ab')得到的结果是list("('ab')"):
In [138]: ;list('ab')
Out[138]:
['(', "'", 'a', 'b', "'", ')']
Run Code Online (Sandbox Code Playgroud)
我使用的是jupyter带ipython 4。它发生在ipython和中ipython notebook。有没有人看过这个,或者有没有人知道它是否是预期的,如果是,为什么?
pandas.DataFrame我在将包含非 ASCII 字符的值写入 Oracle 数据库时遇到困难。这是一个可重现的示例(给定真实的连接字符串):
import pandas as pd\nfrom sqlalchemy import create_engine, Unicode, NVARCHAR\n\nconnection_string = oracle://<name>:<password>@<database>'\n\ndf = pd.DataFrame([\n ['Soci\xc3\xa9t\xc3\xa9 G\xc3\xa9n\xc3\xa9rale']\n ], columns=['firm'])\n\nconn = create_engine(connection_string, encoding='utf-8')\ndtypes = {'firm': Unicode(40)}\n\ndf.to_sql('test', con=connection_string, dtype=dtypes, if_exists='replace')\nRun Code Online (Sandbox Code Playgroud)\n\n产生的错误看起来像
\n\nUnicodeEncodeError: 'ascii' codec can't encode character '\\xe9' in position 4: ordinal not in range(128)\nRun Code Online (Sandbox Code Playgroud)\n\n我想问题是如何让它在写入时使用UTF-8编码。encoding我知道in的默认值create_engine是utf-8',我认为它会控制使用的编码。\n我也尝试过dtypes = {'firm': NVARCHAR(40, convert_unicode=True)},但遇到了同样的错误。
我尝试在写入 ( ) 之前对数据进行编码,df['firm'] = df.firms.str.encode('utf-8')这确实解决了这个问题,但结果却导致了更大的问题。
这似乎是一个简单的问题,但我花了几个小时查看文档和 SO,但不知道该怎么做。
\n\n使用的版本是;Python: 3.6 …