首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在这段代码中是否正确使用了memoryview对象?

在这段代码中是否正确使用了memoryview对象?
EN

Stack Overflow用户
提问于 2019-04-03 19:23:06
回答 1查看 39关注 0票数 1

我需要找到某个文本中出现的所有回文。我将从外部文件中提取数据。我需要注意内存对数据的有效处理,因此我使用了一个内存视图对象。但是,我需要在内存视图对象上执行一些字符串操作,所以我使用了tobytes()方法。这是在不复制数据的情况下处理这些对象的正确方式吗?

代码语言:javascript
运行
复制
from collections import Counter

palindrome = []
# read file as binary data
with open('some_text.txt', 'rb') as fr:

    # create memoryview object
    data = memoryview(fr.read())

    # applying the tobytes() method
    text = data.tobytes()

    # split the sentences to words
    for word in text.split():
        # append to palindrome list if true
        if is_palindome(word):
            palindrome.append(word)

    # return a Counter object with the palindromes and the number of occurences
    palindrome = Counter(palindrome)
    print(palindrome)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 16:13:28

您可以只使用fr.read()中的bytes

代码语言:javascript
运行
复制
    with open('some_text.txt', 'rb') as f:
        b = f.read()
        print(b.__class__, id(b), len(b))
        data = memoryview(b)
        text = data.tobytes()
        print(text.__class__, id(text), len(text))

可能的输出:

代码语言:javascript
运行
复制
<class 'bytes'> 47642448 173227
<class 'bytes'> 47815728 173227

对于CPython,id()返回内存中对象的addres。因此,在本例中,data.tobytes()返回一个副本。

考虑使用文本模式

with open('some_text.txt', 'r') as f:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55493981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档