use*_*101 -1 python stringio python-3.x cstringio
我有python 3.6.我想从另一个名为'run.py'的python文件中执行名为'operation.py'的python文件.
在operation.py我做from cStringIO import StringIO.PyCharm向我显示警告,没有名为StringIO的模块.我知道,因为python3我必须从io导入StringIO模块.但是,当我使用此导入时,此模块的功能不再起作用.
虽然有一个警告from cStringIO import StringIO,代码仍然有效(我知道这个导入确实有效,因为我试图使它成为一个注释,它无法运行).问题是,当我尝试通过'run.py'文件运行此文件时,它无法运行并打印以下消息:ModuleNotFoundError: No module named 'cStringIO'.
我试图在PyCharm中使用这个未解决的参考问题,但它没有帮助.
为什么'operation.py'会运行警告,但'run.py'不会?我怎么解决这个问题?
operation.py:
from cStringIO import StringIO
str_io = StringIO()
g = Generator(str_io, False)
# There is a full code here...
Run Code Online (Sandbox Code Playgroud)
run.py:
import operation
def main():
operation
Run Code Online (Sandbox Code Playgroud)
该operation.py有一个警告,但运行良好,run.py有失败.
我想你正在寻找Python 3.x中的io模块.cStringIO(这是一个更快版本的Python 2模块StringIO,请参见此处)被替换为io,以及许多其他更改.有关详细信息,请参阅此处.
历史记录:这就是为什么我们不再拥有cStringIO和StringIO:
Python 2.x中的一个常见模式是在纯Python中实现一个模块版本,并将可选的加速版本实现为C扩展; 例如,泡菜和cPickle.这会导致导入加速版本的负担,并在这些模块的每个用户上回退到纯Python版本.在Python 3.0中,加速版本被认为是纯Python版本的实现细节.用户应始终导入标准版本,该版本尝试导入加速版本并回退到纯Python版本.pickle/cPickle对接受了这种治疗.配置文件模块位于3.1的列表中.StringIO模块已经变成了io模块中的一个类.(来源)
使用这个:
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19686 次 |
| 最近记录: |