как удалить точку с запятой в конце элемента из текстового файла в список
Как удалить эту точку с запятой (;) из текстового файла. содержимое моего текстового файла:
201911007,1,28;
201203008,1,28;
199710014,1,28;
201612010,1,28;
201710017,1,28;
Затем python читает его, у него всегда есть точка с запятой в конце 28, если я запускаю коды
with open("empMR.txt", 'r') as files:
for dln in files:
dln = dln.strip()
if len(dln) >= 1:
lii = dln.split(",")
MR_empno.append(lii[0].strip())
month.append(lii[1].strip())
days_work.append(lii[2].strip())
print(days_work)
ВЫВОД: ['28;', '28;', '28;', '28;', '28;'] Я хочу удалить точку с запятой (;) на каждом выходе Ожидаемый результат [28, 28, 28, 28, 28]
4 ответа
Есть несколько способов решить эту проблему.
- Взгляните на
.replace()
метод, что-то вродеdln.replace(';', '')
может быть полезно - Если все ваши строки выглядят одинаково, вы можете удалить последний символ -
dln = dln[:-1]
может быть полезно
Какой из них вы выберете, зависит от того, насколько вы уверены в том, что данные всегда будут выглядеть одинаково, и от того, какие методы вам удобнее.
Если вы хотите удалить; навсегда из вашего файла. Откройте файл с помощью vim
vi filename
then press esc
enter :%s/;$//g then enter
save the file esc-->:wq --> enter
Если вы хотите обработать это на Python
with open('filename.txt','r') as fp:
data=fp.read()
data = data.splitlines()
data = [line.strip(';') for line in data]
Просто включите символы, которые хотите удалить (включая;)
for dln in files:
dln = dln.strip("; \n\r\t")
вам не нужно добавлять дополнительные вызовы к другим функциям и, особенно, не нужны регулярные выражения только для этого (могут быть другие веские причины для использования регулярных выражений, см. пример ниже)
data = re.findall("([^,]*)\s*,\s*([^,]*)\s*,\s*([^;]*)\s*;",files.read())
for empNo,monthNo,days_work in data:
print("E:",empNo, "Month:",monthNo, "Days Worked:",days_work)
Регулярные выражения - мощные инструменты для строк.
import re
in_list = ['28;', '28;', '28;', '28;', '28;']
out_list = [re.sub(';', '', item) for item in in_list]
print(out_list)
['28', '28', '28', '28', '28']