如何从文本文件中获取一些值并写入列表?

时间:2019-07-18 14:49:56

标签: python text

我正在设置一个脚本,我需要从文本文件中获取一些值到列表中。这是我的文本文件的体系结构:

someValue
someValue
someValue
Value
 example1
 example2
Value
 example3
 example4
someValue
someValue
Value
 example5
[...]

预期输出为:

my_list = [['Value', 'example1', 'example2', '\n'], ['Value', 'example3', 'example4', '\n'], ['example5', ..]]

但是我得到了:

my_list = [['Value', 'example1', 'example2'], ['Value', 'example1', 'example2'], ['Value', 'example1', ..]]

当我试图将其写入文件时,我这样写:

[example1, example2]在我的文件上。

但是我想获得这个(带有'\ n'):

example1
example2

我已经尝试过了:

f = open(file, 'r')
for num, lines in enumerate(f, 1):
   my_list.append(lines)
   if 'Value' in lines:
      my_list_2.append(num)

for i in range(len(my_list_2)):
     number_of_lines = my_list_2[i+1] - my_list_2[i]
     for j in range(int(number_of_lines)):
          extract.append(my_list[my_list_2[0]+j])
     file = open(file2, 'w')
     for k in range(len(extract)):
         file.write(extract[k])

我们非常感谢您的帮助。预先感谢。

2 个答案:

答案 0 :(得分:0)

考虑一种在第一次阅读时捕获相关行的方法。我们可以设置一个布尔值以使循环知道何时遇到Value时是否应该添加行:

f = open(file, 'r')
lines = f.readlines()
# what we'll be writing to a file
output = list()
# the current captured lines to be added to output
current = list()
# boolean specifying whether we should be trying to add lines to current
found = False

for line in lines:
    # stop adding lines to current when we encounter a line without a space as its first character
    if found and not line.startswith(' '):
        found = False
        output.append(list(current))
        current = list()

    # add lines to our current list if our boolean is set, otherwise be looking for 'Value'
    if found:
        current.append(line[1:])
    elif line == 'Value\n':
        found = True
        current.append(line)

# make sure to add values if current isn't empty after the loop's execution
if current:
    output.append(current)

这给了我们output

output = [['Value\n', 'example1\n', 'example2\n'], ['Value\n', 'example3\n', 'example4\n'], ['Value\n', 'example5\n']]

然后我们可以轻松地将其写入文件(确保使用附加选项a打开):

with open(file2, 'a') as wf:
    for x in output:
        for val in x[1:]:
            wf.write(val)

输出文件的内容为:

example1
example2
example3
example4
example5

包括尾随换行符。希望这会有所帮助!

答案 1 :(得分:0)

我将尝试解释我如何解决此问题:

for num, lines in enumerate(f, 1):
    my_list.append(lines)

newlist = []
for i in range(len(my_list)):
    splitlist = my_list[i].splitlines()

    for j in range(len(splitlist)):
        newlist.append(splitlist[j])

这样做,我获得了一个列表,其中的元素都是文件中的所有行。

然后我创建了一些列表,其中包含我的特定字符串的幻影索引:

index = []
for i in range(len(newlist)):
    if newlist[i].startswith('string1'):
         index.append(i+1)

我遇到了添加\n的问题,因为当我在新文本文件中写入列表中的所有项目时,我才进行管理。

希望我已经很好地解释了。对于任何类型的问题,只需发表评论即可。