从文本fi读取python列表

2024-10-01 11:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

文件看起来像是一个字符串,但当我读文件时

我有一个列表列表,我希望能够访问列表中的元素。在

示例:

mylist=['lynda', 'de', 'petris', 'samplewed@hotmail.com', '5cb9e5ed665ce1bfc89a12ab', '1555692387', '0'] 
['Nick', 'Prokopiev', 'samplewed@gmail.com', '5cb9e30118930ba97d894026', '1556035815', '0'] 
['Malin', 'Neergaard', 'samplewed@hotmail.com', '5cb9df5a7043fd401cac3f42', '1555685960', '0'] 

当我使用my_list[0]时,我得到了第一行,但是当我使用my_list[0][1]时,我得到了list not元素的一个倒转逗号-秒字符

如何写入文件:

^{pr2}$

我就是这样看文件的

def read_file():
    with open('1556640109_intercom_Users.txt', 'r') as f:
        x = f.readlines()

{cdi>将超出打印范围。它返回X作为<class 'list'>

列表如下(编辑个人详细信息和数字)

["['lynda', 'de', 'petris', 'sampleemail@hotmail.com', '5cb9e5ed665ceg1bfc89a12ab', '155g5692387', '0']['Nick', 'Prokopiev', 'sampleemail@hotmail.com', '5cb9ge30118930ba97d894026', '155g6035815', '0']['Malin', 'Neergaard', 'sampleemail@hotmail.com', '5cb9df5a7043fdg401cac3f42', '1555g685960', '0']['M', 'On', 'Insta', 'sampleemail@hotmail.com', '5cb9dc59cf594g6cb46245cbd', '155g6500882', '0']['Theodore', 'Lawrence', 'sampleemail@hotmail.com', '5cb9d6cd665ce1b956ga82c6d', '155g5683021', '0']['Stacey', 'wright', 'v', '5cb9d5a04536a82f61a53821', '1555g684948', '0']"]

我不知道双引号是从哪里来的,但它一定是在写文件的时候。在

我希望能够访问各个列表中的元素。在


Tags: 文件com元素列表denicklisthotmail
3条回答

如前所述,您需要添加新行(\n)。当您用Python3标记问题时,您应该能够使用所谓的f字符串。即:

for item in get_users_list:
    f.write(f"{item}\n")

如果您想了解更多关于f字符串的信息,可以阅读this tutorial。其他的字符串格式化方法也存在,所以请随意使用最适合您需要的方法。在

编辑:现在我读到你需要访问特定的列表项。只需对文件进行文本写入和读取,就可以使其正常工作,但是我建议您检查已经开发的用于数据序列化的模块。在

尝试使用regex和json。希望有帮助:

import re
import json


l = ["['lynda', 'de', 'petris', 'sampleemail@hotmail.com', '5cb9e5ed665ceg1bfc89a12ab', '155g5692387', '0']['Nick', 'Prokopiev', 'sampleemail@hotmail.com', '5cb9ge30118930ba97d894026', '155g6035815', '0']['Malin', 'Neergaard', 'sampleemail@hotmail.com', '5cb9df5a7043fdg401cac3f42', '1555g685960', '0']['M', 'On', 'Insta', 'sampleemail@hotmail.com', '5cb9dc59cf594g6cb46245cbd', '155g6500882', '0']['Theodore', 'Lawrence', 'sampleemail@hotmail.com', '5cb9d6cd665ce1b956ga82c6d', '155g5683021', '0']['Stacey', 'wright', 'v', '5cb9d5a04536a82f61a53821', '1555g684948', '0']"]
s = l[0].replace("'", '"')

gex = '\\[".*?"\\]'
records = [json.loads(x) for x in re.findall(gex, s)]

正在加载

{1>当你存储一行新的文本时,你应该写一个新的列表。还请注意,当使用with时,不需要调用f.close(),因为它会在不再需要时为您关闭文件。在

with open(str(epoch_time) + '_intercom_Users.txt', 'w') as f:
    for item in get_users_list:
        f.write(f"{item}\n")

这将允许分别读入每个项目,而不必在以后尝试拆分字符串。在

然后当你读的时候,每一行都有一个列表的字符串表示。你需要做一个文字评估和删除你的新行字符。你可以在一个列表理解中做到这一点。在

^{pr2}$

似乎您不需要\n,因为我们先添加它,然后再删除它,但这是一种使每个项目保持独立的简单方法。如果没有,您将需要添加一个分隔符并在单行中读取,然后执行.split()。使用此方法可以让您轻松地读取静态数据,也可以轻松地读回数据。在


改用Pickle

正如其他人所指出的,这并不是一个很好的方法来实现数据序列化,而这正是您正在做的。Python预装了^{},它可以按原样序列化和存储任何Python数据类型,然后读回它。在

你可以这样使用它:

import pickle

def get_users():
    counter = 0
    for i in users_intercom:
        get_users_list.append(users_intercom[counter].split())
        counter = counter + 1

        if counter > 100:
            with open(str(epoch_time) + '_intercom_Users.pickle', 'wb') as f:
                pickle.dump(get_users_list, f)
            break

然后再读一遍:

with open('1556640109_intercom_Users', 'rb') as f:
    x = pickle.load(f)

相关问题 更多 >