如何将嵌套列表从变量写入文本文件,以便嵌套列表中的每个列表都写入自己的行?
需要将列表编译回文本文件,格式与使用f.readfiles()
函数拉出之前的格式完全相同。
除了基于变量的解决方案和多变量解决方案之外,也被接受。 csv module
也是一种选择,但我宁愿在没有它的情况下首先学习它的逻辑。
假设text file
在每一行中都包含list
,如下所示:
['some_text','foo', some_int]
['some_text','foo', some_int]
['some_text','foo', some_int]
...
每个列表包含多个项目。希望所有行都从文本文件read
成为一个大的嵌套列表并存储到variable
中,如下所示:
variable = [['some_text','foo', some_int],
['some_text','foo', some_int],
['some_text','foo', some_int]]
存储在上述变量中的信息格式无关紧要。现在使用一些list tools编辑存储在变量中的列表。编辑完成后,包含已编辑列表的变量将再次写回同一文本文件,并使用新的更改数据覆盖所有数据,如下所示:
['some_text','bar', some_int]
['edited_tx','foo', some_int]
['some_text','foo', edtd_int]
...
我设法用这段代码读了一行:
with open("my_lists.txt") as f:
listed_text = f.readlines()
文本文件中的所有文本现在都存储在一个名为“listed_text”的变量中,然后正在使用一些list tools首选项进行编辑。
有关上述代码的更多信息,请点击此处:
How do I read a file line-by-line into a list?
这是一个不完整且不起作用的编码示例,说明了应该对列表进行的操作。
# Let us open 'my_lists.txt' and read lines
# into a variable as a list.
def open_file():
with open("my_lists.txt") as f:
listed_text = f.readlines()
list_item_editor(listed_text)
# Now let us replace 'foo' every index(1) in
# nested lists with word 'bar' with
# this imaginary editor 'list_item_editor()'.
def list_item_editor(argument):
edited_list = []
for item in nested_list:
nested_list[item][i] = "bar"
...
...
write_file(edited_list)
# Now we write the edited list back to 'my_lists.txt'
# by replacing the whole contents with new edited list.
def write_file(arg):
with open("my_lists.txt", "w") as write_file:
write_file.write(arg)
这是首选输出的示例。嵌套列表中的每个项目(列表)都写入自己的行。 “新行标记”\n
在文本文件中不可见。
# This is text_file.txt containing edited lists
# New line inserted after every list
['some_text','bar', some_int]
['edited_tx','foo', some_int]
['some_text','foo', edtd_int]
['some_text','bar', some_int]
['edited_tx','foo', some_int]
['some_text','foo', edtd_int]
['some_text','bar', some_int]
['edited_tx','foo', some_int]
['some_text','foo', edtd_int]
答案 0 :(得分:0)
输入文件为:
['some_text','foo', 1]
['some_text','foo', 2]
['some_text','foo', 3]
这将读取/编辑/写入文件:
import ast
with open('input.txt') as f:
data = [ast.literal_eval(line) for line in f]
print(data)
data[0][1] = 'bar'
data[-1][-1] = 5
print(data)
with open('output.txt','w') as f:
for line in data:
f.write(str(line) + '\n')
但是将Python列表作为文本写入文件并不是最好的方法。更好的方法是使用您愿意将输入文件更改为此的csv
模块:
some_text,foo,1
some_text,foo,2
some_text,foo,3
并使用此代码:
import csv
with open('input.txt',newline='') as f:
r = csv.reader(f)
data = list(r)
print(data)
# Note, with csv, all columns are read as strings,
# so to do calculations convert:
data = [[a,b,int(c)] for a,b,c in data]
print(data)
data[0][1] = 'bar'
data[-1][-1] += 2
print(data)
with open('output.txt','w',newline='') as f:
w = csv.writer(f)
w.writerows(data)
另外,请查看pandas
第三方模块。