Python读取字符
Posted
技术标签:
【中文标题】Python读取字符【英文标题】:Python read character 【发布时间】:2021-12-12 12:24:12 【问题描述】:我想知道如何在 Python 中将字符读入缓冲区?
在 C 代码中,我可以轻松声明缓冲区字符,例如 char buffer[256];
:
void read_char(int x, char buffer[], int *flag_stop)
int i, length;
char character;
i = 0;
bzero(buffer, 256);
do
if ((length = read(x, &character, 1)) <= 0)
*flag_stop = 1;
break;
buffer[i] = character;
i++;
while(c != 0x0A);
但我不知道如何在 Python 中做,所以代码是这样的:
def read_char(x,buffer,**flag_stop):
i = 0
buffer = np.array([], dtype='S64')
while True:
if os.read(x, character, 1) <= 0:
**flag_stop == 1
break
buffer[i] = str(character)
i=i+1
if(character != 0x0A):
break
我已经尝试过使用 numpy.chararray 但我没有工作。对这个问题有什么想法吗?非常感谢!
【问题讨论】:
flag_stop
在您的函数中似乎没有做任何事情,它的预期用途是什么?此外,您声明的 buffer
数组的长度为 0 - 您可以使用 numpy.zeros
或 numy.empty
之类的东西来声明所需大小的数组(如果您想动态更改其列表,则列表会更好size)...您还用局部变量覆盖了函数buffer
的参数...
flag_stop 在我的主程序中使用,如果 flag_stop = 1 程序将停止。如您所说,我将尝试使用 numpy.zeros 和 numpy.empty 。谢谢
我不知道如何在 Python 中声明标志,所以我把 ** 放在 flag_stop 之前,对吗?
** 用于表示关键字参数的字典 - 请参阅 here 或 here 。据我所知,没有办法显式设置底层 C 退出标志。如果我明白你想做什么,你可以提出一个exception 或调用sys.exit
或类似的东西来退出程序
flag_stop 已在主编中删除。但是我对声明变量还有另一个问题,例如在 C prog 中,我可以在函数中执行 您的主要问题是您希望在 Python 中编写与 C 完全相同的代码。
Python 需要这样的东西
def read_char(x):
flag_stop = False # or 0
i = 0
buffer = np.array([], dtype='S64')
while True:
character = os.read(x, 1)
if not character: # if len(character) < 0
flag_stop = True # or 1
break
buffer[i] = character
i += 1
if character != 0x0A:
break
return buffer, flag_stop
# ---
buffer, flag_stop = read_char(file_handler)
我不喜欢你的代码中的str()
- 你可能会得到一个单字节,它是多字节代码的一部分(如utf-8
)并且转换为str()
只会弄乱它。
【讨论】:
感谢@furas 的回答,os.read(x,1) 仍然存在问题,它使函数返回整数值,但基本上它的工作方式与 C 中的函数一样。你有解决方案吗替换 os.read?以上是关于Python读取字符的主要内容,如果未能解决你的问题,请参考以下文章
python使用StringIO读取字符串内容,并使用pandas基于字符串内容生成dataframe