在文件中创建Python列表并在以后进行编辑

在文件中创建Python列表并在以后进行编辑,python,list,Python,List,我正在制作一个程序,将某些数据存储在txt文件中。我是这样做的,它可以工作,但我想把它改成列表,这样可以更容易地用list.remove和list.append编辑里面的内容。。。这是我制作的格式: Username:data1:data2:data3:data++ 我想要实现的是: Username:[data1, data2, data3, data++] Username:[data1, data2] Username1:[data134, data453, data6534] Use

我正在制作一个程序,将某些数据存储在txt文件中。我是这样做的,它可以工作,但我想把它改成列表,这样可以更容易地用list.remove和list.append编辑里面的内容。。。这是我制作的格式:

Username:data1:data2:data3:data++
我想要实现的是:

Username:[data1, data2, data3, data++]
Username:[data1, data2]
Username1:[data134, data453, data6534]
Username3:[data5345, data678, data111, data434]
and so on...
我为什么要这个

因为编辑以“:”分隔的数据不是“Pythonic方式”,所以我想将它们转换为列表

我使用此过滤器获得某些行:

textfile = open("%s/CreativePoints/Data/plotovimemberi.txt"%pluginlokacija2, 'r+')
a = filter(lambda x: x.startswith("%s:%s"%(targetplot, userID)), \
                                          textfile.readlines())
因此,当前数据文件如下所示:

Username:data1:data2
Username1:data134:data453:data6534
Username3:data5345:data678:data111:data434
and so on...
我想要实现的是:

Username:[data1, data2, data3, data++]
Username:[data1, data2]
Username1:[data134, data453, data6534]
Username3:[data5345, data678, data111, data434]
and so on...
为什么??因为我想使用上面提到的过滤器获得文件中的特定行并编辑列表。。。所以我只需要使用“line.split(':')[1]”分割行,并获取数据列表,我可以使用list.append和list.remove编辑这些数据


感谢阅读/回答!:)

我想你应该读一下ConfigParser。这个图书馆可以解决你的阅读和写作问题。您可以在此处阅读有关在ConfigParser中使用列表的更多信息->

您可以使用或将对象存储在文本文件中。使用pickle的示例:

import pickle
# save some list
lst=['hello','pickle']
pickle.dump(lst, open('lst.txt','w'))
# load list from txt file
lst2=pickle.load(open('lst.txt'))
print(lst2)
如果要以可读形式存储数据,可以使用pyyaml:

from yaml import load, dump
# dump list in readable form
lst=['hello', 'yaml']
open('lst2.txt', 'w').write(dump(lst))
# load list from yaml file
print(load(open('lst2.txt')))
据此编辑:

list = [data1, data2, data3, data++]

file = open("file.txt", "w")
file.write("Username: " + str(list))
file.close

我认为你需要一本字典,而不是一个列表,除非用户名不是唯一的,你可以使用一个列表

data_text = '''Username1:data1:data2:data3:data++
Username2:data1:data2:data3:data++
Username3:data1:data2:data3:data++
Username3:data4:data5:data6:data++'''

lines = data_text.split('\n')

data_dict = {}
data_list = []
for l in lines:
    fields = l.split(':')
    user = fields[0]
    data = fields[1:]
    data_dict[user] = data
    data_list.append((user,data))

print(data_text)
print(data_dict)
print(data_list)

虽然我想我已经对你的问题给出了一个答案(见下面的代码),但我有一些评论:

  • 在文本文件中使用冒号作为分隔符并不是“不连贯的”;这不是Python,而是数据

  • 您应该查看YAML或JSON之类的东西来存储数据;然后,您可以使用为您处理大部分细节的库

  • 使用您提出的方案,您将无法在数据记录中使用“,”,也无法(简单地)使用空格开始或结束记录。这些问题应该由任何合理的JSON或YAML库来处理

  • 您还可以将类似sqlite(python附带)的东西作为数据库存储。这是一个多一点的工作,但您将能够根据您选择的标准搜索记录,以及轻松地删除和添加记录。使用纯文本文件,您必须自己管理所有这些内容

以下是我的解决方案:

from pprint import pprint

def writefile(outfilename,db):
    outfile=open(outfilename,'wt')
    for username,userdata in db:
        userdatastr= ','.join(userdata)
        outfile.write('%s: [%s]\n' % (username,userdatastr))
    # or, better, use 'with file("...") as ...'
    outfile.close()

def readfile(infilename):
    infile=open(infilename,'rt')
    db=[]
    for line in infile:
        username, rest = line.split(':',1)
        lstart= rest.find('[')
        if lstart==-1:
            raise RuntimeError('couldn''t find "[" for user "%s"' % username)
        lend= rest.rfind(']')
        if lend==-1:
            raise RuntimeError('couldn''t find "]" for user "%s"' % username)
        userdata = rest[lstart+1:lend].split(',')
        db.append((username,userdata))
    return db

db=[('Bob',['foo','bar','baz']),
    ('Jane',['oof','rab','zab','xuuq']),
    ('Rudy',['some','data'])]

writefile('db.txt',db)

indb=readfile('db.txt')

print 'original:'
pprint(db)
print 'from file:'
pprint(indb)
结果是:

 original:
 [('Bob', ['foo', 'bar', 'baz']),
  ('Jane', ['oof', 'rab', 'zab', 'xuuq']),
  ('Rudy', ['some', 'data'])]
 from file:
 [('Bob', ['foo', 'bar', 'baz']),
  ('Jane', ['oof', 'rab', 'zab', 'xuuq']),
  ('Rudy', ['some', 'data'])]
而db.txt看起来像:

Bob: [foo,bar,baz]
Jane: [oof,rab,zab,xuuq]
Rudy: [some,data]

你的问题是什么?@EmilVikström如何在txt文件中列出包含特定数据的列表,然后再获取,以便我可以编辑它?格式是Username:[data1,data2,data3]在文件中存储对象更常见的方法是pickle,那么您到底尝试了什么呢?什么是有效的/无效的?@BasicWolf我做了,所以它将数据与“:”分开,但正如我所说,这不是python式的方法,所以我想删除:在“数据”和内部实现列表之间…用户名是唯一的。。。每一行都包含一个用户的数据…Pickles看起来不错,但这将返回该文件中的所有内容,对吗?我只需要在该文件中获得某些行,就像我使用上面的“过滤器”一样。。。阅读上面问题的底部,我解释了如何存储数据以及如何存储数据…不,我已经这样做了,我想要的是使用列表来存储数据,而不是用“…我已经为您编辑了它我很清楚,但例如,我想在file.txt中的列表中添加更多数据,我该怎么做?@user3557637
list.append(data2++)
或其他什么