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

ezykj2lf  于 2023-10-13  发布在  Python
关注(0)|答案(2)|浏览(118)

我想从名单中删除第二个名字,以便以后进一步处理。
这段代码创建了一个文件,文件名改变了,但文件名保持不变。我对python不太了解,所以如果有人解释我们做错了什么,我会很感激。

  1. import csv
  2. import os
  3. def remove_second_names(full_name):
  4. name_parts = full_name.split()
  5. first_name = name_parts[0]
  6. first_name = first_name[0].upper() + first_name[1:].lower()
  7. return first_name
  8. csv_file_path = input("Geben Sie den Pfad zur CSV-Datei ein: ")
  9. try:
  10. with open(csv_file_path, 'r', newline='') as file:
  11. reader = csv.reader(file, delimiter='\t')
  12. rows = [row for row in reader]
  13. for i, row in enumerate(rows):
  14. if len(row) >= 2:
  15. row[1] = remove_second_names(row[1])
  16. rows[i] = row
  17. base_file_name = os.path.basename(csv_file_path)
  18. output_file_path = base_file_name.replace('.csv', '_bearbeitet.csv')
  19. with open(output_file_path, 'w', newline='') as file:
  20. writer = csv.writer(file, delimiter='\t')
  21. writer.writerows(rows)
  22. print("Die bearbeiteten Daten wurden in die Datei '{}' geschrieben.".format(output_file_path))
  23. except FileNotFoundError:
  24. print("Die angegebene Datei wurde nicht gefunden.")
  25. except Exception as e:
  26. print("Ein Fehler ist aufgetreten:", str(e))

CSV文件看起来像这样:

  1. Name;Firstname Secondname;10EH2;
  2. Name;Firstname-Secondname;10EH3;
  3. Name;Firstname Secondname OtherName;10EH3;

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

  1. Name;Firstname;10EH2;
  2. Name;Firstname;10EH3;
  3. Name;Firstname;10EH3;
ecr0jaav

ecr0jaav1#

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

  1. import re
  2. def remove_second_names(full_name):
  3. return re.split(r"\W", full_name)[0]
  4. print(remove_second_names("Firstname"))
  5. print(remove_second_names("Firstname Secondname"))
  6. print(remove_second_names("Firstname-Secondname"))

这应该给你给予:

  1. Firstname
  2. Firstname
  3. Firstname
cclgggtu

cclgggtu2#

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

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

相关问题