读取和写入特定内容

  • 本文关键字:读取 python file
  • 更新时间 :
  • 英文 :


我正在尝试读取文件1的特定内容.txt并将此特定内容写入另一个文件文件2.txt。问题是我在 Bar 之后阅读了整个部分,我只想读取以 [x] 开头的行,并且只读取 Bar 部分。

源代码

def read_write_file_content():
    data_file = open('file1.txt')
    block = ""
    found = False
    for line in data_file:
        if found:
            if line.strip() == "##### Foo":
                break
            else:
                block += line
        else:
            if line.strip() == "##### Bar:":
                    found = True
                    block = line
    print block


    data_file.close()
view_today()

输入文件文件1.txt

##### Xyz
* [] Task 112
* [] Cl 221
##### Foo
* [] Task 1
* [x] Clone 2

##### Bar:
* [x] Email to A
* [] Email to B
* [x] Email to C
##### Bob
* [] Task 3
* [x] Clone Bob

输出文件文件2.txt

##### Bar:
* [x] Email to A
* [x] Email to C

任何建议将不胜感激 ?谢谢:)

后续问题

通过检测部分来打开和关闭found。当found True使用'[x]' in line过滤行。

found = False
for line in open('file1.txt'):
    line = line.strip()
    if not line:
        continue
    if line.startswith('#####'):
        if line == '##### Bar:':
            found = True
            print(line)
        else:
            if found:
                break
        continue
    if found and '[x]' in line:
        print(line)

您首先需要检测您是否在"Bar"块内。然后,当您在时,打印/累积那些以 * [x] 开头的行。这里有一种方法可以做到这一点:

def get_selected_block_entries(lines, block_name,
                               block_prefix='#####', selected_entry_prefix='* [x]'):
    selected_lines = []
    block_marker = '{} {}'.format(block_prefix, block_name)
    for line in lines:
        if line.startswith(block_prefix):
            in_block = line.startswith(block_marker)
            if in_block:
                selected_lines.append(line)
        else:
            if in_block and line.startswith(selected_entry_prefix):
                selected_lines.append(line)
    return selected_lines
with open('file1.txt') as infile, open('file2.txt', 'w') as outfile:
    selected = get_selected_block_entries(infile, 'Bar:')
    print selected    # a list of selected entries within a Bar: block
    outfile.writelines(selected)

file1.txt包含以下内容时运行上述代码:

##### Foo* [] 任务 1* [x] 克隆 2##### 栏:* [x] 电子邮件给 A* [] 电子邮件给 B* [x] 电子邮件给 C##### Foo* [] 任务 1* [x] 克隆 2

指纹:

['##### Bar:', '* [x] 电子邮件到 A', '* [x] 电子邮件到 C']

这是从get_selected_block_entries()函数返回的列表。同样file2.txt包含:

##### 栏:* [x] 电子邮件给 A* [x] 电子邮件给 C

此输出显示不会收集"Bar:"块后面的选定条目。

另请注意,如果有多个匹配块,

将从所有匹配的块中收集选定的条目,例如

get_selected_block_entries(infile, 'Foo') 将从两个 Foo 块返回选定的条目:

['##### Foon', '* [x] Clone 2n', '##### Foon', '* [x] Clone 2n']

而且,如果您想从所有块中选择所有选定的条目,您可以这样做:

get_selected_block_entries(infile, '')
您可能

想测试给定的行是否以 "* [x]" 开头。

import re
section = None
for line in data_file:
    sre = re.match("^#####s*(w):s*",line)
    if sre:
        section = sre.group(1)
    if line.startswith("* [x]") and section == "Bar":
            block += line

查看此处以获取有关在 python 中使用正则表达式的更多信息。

相关内容

  • 没有找到相关文章

最新更新