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.zerosnumy.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 中我不需要声明它。但是当我编译运行它时,出现了一个错误:NameError: global name 'character' is not defined。对不起,如果我提出了愚蠢的问题 【参考方案1】:

您的主要问题是您希望在 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

python之压缩字符数据读取解析

Python - 读取 Emoji Unicode 字符

python读取文本文件,如何将每行最后一个特定字符替换?

python中分割字符串split切割并选择输出 逐行读取文件后字符串拼接

如何在 Python 中从十六进制(字节字符串)中读取单个字符?