在 Python 中从 CSV 文件中删除人们的名字

问题描述 投票:0回答:1

我想从列表中删除第二个名字,以便我稍后可以进一步处理它们。

代码创建了一个具有更改名称的文件,但它保持不变。我对 python 不太了解,所以如果有人解释我们做错了什么,我会很感激

import csv
import os

def remove_second_names(full_name):
    name_parts = full_name.split()
    first_name = name_parts[0]
    first_name = first_name[0].upper() + first_name[1:].lower()
    return first_name

csv_file_path = input("Geben Sie den Pfad zur CSV-Datei ein: ")

try:
    with open(csv_file_path, 'r', newline='') as file:
        reader = csv.reader(file, delimiter='\t')
        rows = [row for row in reader]

    for i, row in enumerate(rows):
        if len(row) >= 2:
            row[1] = remove_second_names(row[1])
            rows[i] = row

    base_file_name = os.path.basename(csv_file_path)
    output_file_path = base_file_name.replace('.csv', '_bearbeitet.csv')

    with open(output_file_path, 'w', newline='') as file:
        writer = csv.writer(file, delimiter='\t')
        writer.writerows(rows)

    print("Die bearbeiteten Daten wurden in die Datei '{}' geschrieben.".format(output_file_path))

except FileNotFoundError:
    print("Die angegebene Datei wurde nicht gefunden.")
except Exception as e:
    print("Ein Fehler ist aufgetreten:", str(e))

csv 文件看起来像这样:

Name;Firstname Secondname;10EH2;
Name;Firstname-Secondname;10EH3;
Name;Firstname Secondname OtherName;10EH3;

我希望运行代码后看起来像这样(显然将是真实姓名而不是占位符):

Name;Firstname;10EH2;
Name;Firstname;10EH3;
Name;Firstname;10EH3;
python csv split
1个回答
0
投票

首先,在迭代列表(或任何可迭代对象)时更改列表被认为是不好的做法。通常更好,例如准备一个“结果”迭代,您将在其中添加所需的结果。

然后有几点可以帮助您:

  • 您有一个分号分隔的文件,但您将分隔符指定为
    csv.reader
    csv.writer
  • 中的制表符
  • 您使用
    str.split()
    ,它仅由空格分隔,但您的示例还显示了连字符作为分隔符的潜在用途,并且这种情况未得到解决
© www.soinside.com 2019 - 2024. All rights reserved.