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

ezykj2lf  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(79)

我想从名单中删除第二个名字,以便以后进一步处理。
这段代码创建了一个文件,文件名改变了,但文件名保持不变。我对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;
ecr0jaav

ecr0jaav1#

你可能想看看re包,因为它允许你相当容易地分割像" ""-"这样的“非单词”字符。

import re

def remove_second_names(full_name):
    return re.split(r"\W", full_name)[0]

print(remove_second_names("Firstname"))
print(remove_second_names("Firstname Secondname"))
print(remove_second_names("Firstname-Secondname"))

这应该给你给予:

Firstname
Firstname
Firstname
cclgggtu

cclgggtu2#

首先,在迭代列表(或任何可迭代对象)时更改列表被认为是不好的做法。通常情况下,最好是例如。准备一个“result”iterable,你可以在其中添加你想要的结果。
然后有几点应该可以帮助你:

  • 您有一个以分号分隔的文件,但在csv.readercsv.writer中将分号指定为制表符
  • 您使用str.split(),它只按白色空格分隔,但您的示例还显示了可能使用连字符作为分隔符,而这种情况没有得到解决

相关问题