我想从列表中删除第二个名字,以便我稍后可以进一步处理它们。
代码创建了一个具有更改名称的文件,但它保持不变。我对 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;
首先,在迭代列表(或任何可迭代对象)时更改列表被认为是不好的做法。通常更好,例如准备一个“结果”迭代,您将在其中添加所需的结果。
然后有几点可以帮助您:
csv.reader
和 csv.writer
str.split()
,它仅由空格分隔,但您的示例还显示了连字符作为分隔符的潜在用途,并且这种情况未得到解决