Как вывести на экран информацию про людей у которых фамилия начинается с гласной?
import re
import string
filename = input('Enter name of file: ')
file = open(filename, 'r')
arr = []
arr1 = []
arr = file.readlines()
for i in arr:
arr1.append(i.strip().split(','))
for i in arr1():
if(str(i[0])).startwith((a, e, i, o, u, A, E, I, O, U)):
print(str(i[0]), str(i[1]), str(i[2]))
file.close()
Каким образом можно заставить программу искать по ключам фамилии[0], которые начинаются с гласной?
Програма читает этот файл:
Psih,675,25.05.2005
Alanov,534,24.05.2005
Okun,174,23.05.2005
Pako,832,22.05.2005
Kell,195,21.05.2005
Iren,273,20.05.2005
И на экран должно выводить так:
Alanov,534,24.05.2005
Okun,174,23.05.2005
Iren,273,20.05.2005
Ответы (4 шт):
Если строки надо выводить в неизменном виде, то нет смысла парсить CSV:
with open(filename) as file:
for line in file:
if re.match(r"[aeiouy]", line, flags=re.I):
print(line.strip())
результат:
Alanov,534,24.05.2005
Okun,174,23.05.2005
Iren,273,20.05.2005
Думаю, что ваш код вполне жизнеспособен. Но startswith принимает только один аргумент, что значит вам следует модифицировать его следующим образом: for char in ['a', 'e', 'i', 'o', 'u']: if i[0].lower().startswith(char): print(i). Или можно проверить первую букву фамилии на вхождение в список гласных: if i[0].lower()[0] in ['a', 'e', 'i', 'o', 'u']: print(i)
arr = file.readlines()
t = ['A', 'E', 'I', 'O', 'U','Y']
for i in arr:
arr1.append(i.strip().split(','))
for x in arr1:
if x[0][0] in t:
print(x)
file.close()
['Alanov', '534', '24.05.2005']
['Okun', '174', '23.05.2005']
['Iren', '273', '20.05.2005']
Также можно воспользоваться модулем Pandas:
import pandas as pd # pip install pandas
df = pd.read_csv(r"D:\download\data.csv", header=None, names=["name", "val", "date"])
получим DataFrame:
In [87]: df
Out[87]:
name val date
0 Psih 675 25.05.2005
1 Alanov 534 24.05.2005
2 Okun 174 23.05.2005
3 Pako 832 22.05.2005
4 Kell 195 21.05.2005
5 Iren 273 20.05.2005
фильтруем фрейм, оставляя только те строки, где name начинается с гласной буквы:
res = df[df["name"].str.contains(r"^[aeiouy]", case=False)]
результат:
In [89]: res
Out[89]:
name val date
1 Alanov 534 24.05.2005
2 Okun 174 23.05.2005
5 Iren 273 20.05.2005
результат можно записать в новый CSV файл:
res.to_csv(r"result.csv", index=False)