【问题标题】:Remove Text from CSV file从 CSV 文件中删除文本
【发布时间】:2023-01-12 12:01:42
【问题描述】:

我正在尝试从 CSV 文件中删除特定文本。如果匹配,我希望它删除字符串并创建一个具有相同数据但没有文本的新 csv 文件。

如果不是,我希望它不创建新的 CSV 文件并打印“NOPE”。

如果匹配,我当前的脚本会从原始 CSV 文件中删除文本,并创建一个新的 CSV 文件。如果我输入的文本不正确,它会创建一个新的 CSV 文件,但不会更改任何内容或打印出我的错误消息。

这是我当前的代码:

import csv

result = input("Enter the text you want to remove from the CSV: ")

input_file = open('Input.csv', 'r')
output_file = open('Output.csv', 'w', newline='')
data = csv.reader(input_file)
writer = csv.writer(output_file)

def DEL():
    try:
        for line in data:
            line = [value.replace(result, '') for value in line]
            writer.writerow(line)
    except Exception:
        print('NOPE')
DEL()

【问题讨论】:

  • 您期望在 try/except 块中出现什么异常?如果在字符串中找不到要替换的文本,.replace() 不会引发异常,如果那是您的想法...
  • “如果我输入的文本不正确,它会创建一个新的 CSV 文件,但不会更改任何内容或打印出我的错误消息。”那么,你认为为什么会发生这种情况? (提示:代码说 output_file = open('Output.csv', 'w', newline='') 的地方,你认为这是什么意思?这是发生在 DEL 运行之前还是之后?因此,它是否关心 DEL 内部发生的事情)?
  • 除此之外:用你自己的话说,你认为tryexcept Exception:是什么意思?您打算如何使逻辑起作用?如果文件中不存在该字符串,您预计会引发哪种异常,为什么?
  • 除此之外:如果您一次处理一行文件,并在处理时写入每一行——当文件不包含输入时会发生什么?你怎么知道情况是否如此,直到你已经阅读了整个文件? (毕竟,它可能仍然在尚未阅读的部分中 - 对吗?)因此,更仔细地考虑预期的步骤以及它们需要发生的顺序。

标签: python python-3.x


【解决方案1】:

我认为您误解了 try 语句的工作原理。在“try”语句中,“except”语句仅在“try”语句中的代码崩溃时才执行,即引发错误。如果它执行无误,则“except”语句不会执行。要使其工作,您必须首先测试字符串是否存在,如果不存在,则打印“NOPE”,否则执行更改 - 在“try”部分内:

import csv

def fn_del():
    str_found = False
    try:
        for line in data:
            if result in line:
                line = [value.replace(result, '') for value in line]
                writer.writerow(line)
                str_found = True
    except Exception:
        print('Code crashed')
    finally:
        if not str_found:
            print("NOPE")

result = input("Enter the text you want to remove from the CSV: ")

input_file = open('Input.csv', 'r')
output_file = open('Output.csv', 'w', newline='')
data = csv.reader(input_file)
writer = csv.writer(output_file)

fn_del()

还重新安排了一些代码,使其更“pythonic”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2012-11-10
    • 2015-07-30
    • 2016-11-05
    • 2020-07-18
    • 2018-08-15
    相关资源
    最近更新 更多