#python
#python
Вопрос:
Я создал скрипт, который считывает csv-файл. Когда я запускаю его в Pycharm, все выглядит нормально, однако, когда я отмечаю выходной текст и нажимаю CTRL C и вставляю его в Блокнот, я получаю пробелы между каждой буквой.
Например, когда у меня есть файл в Excel, я получаю следующее:
30.11.2020 09:03 Torbjørn SPF <Seksjon for Passord og Forebygging> Vennligst endre passordet mitt til PST{facb0950fb7a5c537cf7fa68b8894027}
Когда я печатаю, копирую его из вывода Pycharm, я получаю следующее:
2 0 2 0 - 1 1 - 3 0 0 9 : 0 3 : 5 1 T o r b j % C 3 % B 8 r n % 3 C T o r b j % C 3 % B 8 r n % 3 E S P F % 3 C S e k s j o n f o r P a s s o r d o g F o r e b y g g i n g % 3 E V e n n l i g s t e n d r e p a s s o r d e t m i t t t i l P S T % 7 B f a c b 0 9 5 0 f b 7 a 5 c 5 3 7 c f 7 f a 6 8 b 8 8 9 4 0 2 7 % 7 D
Как я могу удалить пробелы?
Я пытался использовать line = line.strip()
, но безуспешно.
Мой скрипт:
class Day05:
print('')
print('~~~~~~~~~~~~~~~~~~~~~~~~ Day 05 ~~~~~~~~~~~~~~~~~~~~~~~~')
print('')
def printDataInLogFile():
# Header
print("Datetimet", end='')
print("Namet", end='')
print("Sectiont", end='')
print("Message")
# Read and loop line by line
file1 = open('./log.csv', 'r')
lines = file1.readlines()
for line in lines:
line = line.strip()
line = line.replace(' ', ' ')
line = line.replace('æ', 'æ')
line = line.replace('ø', 'ø')
line = line.replace('å', 'å')
line = line.replace('{', '{')
line = line.replace('}', '}')
date = ""
name = ""
section = ""
message = ""
for i, d in enumerate(line.split(";")):
if(i == 0):
date = d
elif(i == 1):
name = d
elif(i == 2):
section = d
elif(i == 3):
message = d
# Body
if(name != ""):
print(str(date) "t", end='')
print(str(name) "tt", end='')
print(str(section) "tt", end='')
print(str(message))
""" Script start """
printDataInLogFile()
Некоторая строка с содержимым log.csv:
2020-10-01 07:00:04;Lisbeth ;SPF <Seksjon for Passord og Forebygging>;I dag har jeg lyst til at PST{b53250c991675c7b0c712e9bdc2c1216} skal være passordet mitt
2020-10-01 07:02:22;Unni ;SPF <Seksjon for Passord og Forebygging>;Vennligst endre passordet mitt til PST{5cdadc1037fa416f7d79186adc55f1ff}
2020-10-01 07:03:11;Jan ;SPF <Seksjon for Passord og Forebygging>;I dag har jeg lyst til at PST{1241512147283b40bfe8e2eac36ac2dd} skal være passordet mitt
2020-10-01 07:04:26;Maria ;SPF <Seksjon for Passord og Forebygging>;Vennligst endre passordet mitt til PST{ca1d9d8d4243c374cb14faa8363bc0dc}
2020-10-01 07:06:52;Mellomleder ;SPF <Seksjon for Passord og Forebygging>;Bytt til PST{99e12ae9d06336a7d9c644641388450a}
2020-10-01 07:09:00;Robert ;SPF <Seksjon for Passord og Forebygging>;I dag har jeg lyst til at PST{da52537925c86ac5d5352edd78e10350} skal være passordet mitt
2020-10-01 07:11:13;Håkon ;SPF <Seksjon for Passord og Forebygging>;Vennligst endre passordet mitt til PST{2a6fa4d619a88882dbcf1df5dff8ff65}
2020-10-01 07:11:56;Terje ;SPF <Seksjon for Passord og Forebygging>;Jeg ønsker å endre passord til PST{4970a0cdd3f0eb19e9ec1d7423f26de8}
2020-10-01 07:14:33;Anette ;SPF <Seksjon for Passord og Forebygging>;I dag har jeg lyst til at PST{1b956ee14848acccdc150db512b2084d} skal være passordet mitt
2020-10-01 07:14:51;Daniel ;SPF <Seksjon for Passord og Forebygging>;Bytt til PST{80f7c07f7d06bbcd38f3af5c90afe866}
2020-10-01 07:15:29;Systemeier ;SPF <Seksjon for Passord og Forebygging>;Bytt til PST{e905beda4ccdfaf8c7b3388d057e37c4}
Комментарии:
1. Томалак: Спасибо за совет. Однако между каждым классом есть большие различия. Я изучаю python и каждый день создаю один скрипт с разными темами.
2. А, понятно, тогда продолжайте.
Ответ №1:
У меня есть файл в Excel, тогда я получаю это:
30.11.2020 09:03
Когда я печатаю, копирую его из вывода Pycharm, я получаю следующее:
2 0 2 0 - 1 1 - 3 0 0 9
Вы сохранили файл как Unicode в Excel, но вы не читаете файл как Unicode в Python.
# Read and loop line by line
with open('./log.csv', 'r', encoding='utf-16-le') as file1:
for line in file1:
print(line)
Примечания
- Используйте контекстные менеджеры для открытия files (
with open(...) as f:
) вместо голыхopen()
вызовов. - Всегда открывайте текстовые файлы с явно указанным
encoding
. Если вы не знаете кодировку, вам нужно это выяснить. Доверие к значениям по умолчанию здесь не работает. - Используйте
csv
модуль для чтения CSV-файлов. - Используйте
urllib
модуль для декодирования значений, закодированных в URL, вместо того, чтобы пытаться выполнять ручную замену строк.
Например (для одного ввода, который представляет часть «значение» в key=value
паре):
from urllib.parse import parse_qs
raw_value = "Torbjørn "
parsed_value = parse_qs(f"temp={raw_value}") # -> {'temp': ['Torbjørn <Torbjørn>']}
actual_value = parsed_value['temp'][0] # -> 'Torbjørn <Torbjørn>'
может быть превращен в функцию
def decode_url_value(raw_value):
parsed_value = parse_qs(f"temp={raw_value}")
return parsed_value['temp'][0]
decode_url_value("Torbjørn ") # -> 'Torbjørn <Torbjørn>'
Ответ №2:
Если вы используете библиотеки unidecode
и urllib
, вы можете легко это сделать:
from unidecode import unidecode
from urllib.parse import unquote
...
file1 = open('./log.csv', 'r')
lines = file1.readlines()
for line in lines:
line = unidecode(unquote(line))
line = line.strip()
line = line.replace(' ', ' ')
# line = line.replace('æ', 'æ')
# line = line.replace('ø', 'ø')
# line = line.replace('å', 'å')
# line = line.replace('{', '{')
# line = line.replace('}', '}')
...
Вам больше не нужно будет вручную заменять специальные символы самостоятельно.
Ответ №3:
str.strip()
удаляет только начальные и конечные пробелы, чтобы удалить все символы пробела, используйте str.replace(" ", "")
Комментарии:
1. это удалит все пробелы. Теперь это то, чего хочет OP.