2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение05.08.2022, 21:17 


27/09/19
189
aitap в сообщении #1561465 писал(а):
Какой файл она в этом случае создаст? Где в нём ошибка?

Эта программа создала пустой файл, а после этого, вне зависимости от того, что за text =... будет написан, все равно создается пустой файл. Видимо все из-за того, что получилась ошибка типа "иньекция")
aitap в сообщении #1561465 писал(а):
Какую комбинацию символов можно поместить между '...', чтобы на выходе снова получилась строка, содержащая апостроф?

Видимо (chr(0x22))
aitap в сообщении #1561465 писал(а):
Какие две встроенные функции в Python могут генерировать такие комбинации символов для любых строк?

Видимо chr() и Unicode.

P.S. Извините, что долго не отвечал, никак не мог найти времени, чтобы разобраться

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение05.08.2022, 22:48 


09/05/16
138
kot-obormot в сообщении #1561869 писал(а):
Эта программа создала пустой файл
Значит, в коде есть ещё одна ошибка. Когда исправите её, будут получаться файлы с содержимым import pypaperclip; pypaperclip.copy(r'''). Python в таких файлах будет находить синтаксическую ошибку.
kot-obormot в сообщении #1561869 писал(а):
Видимо (chr(0x22))
К сожалению, нет. Если поместить (chr(0x22)) между одинарными кавычками, получится строка (chr(0x22)). Выполнение '\x22' даст строку ". А вот выполнение '\x27' даст искомую строку '. Вот как бы теперь это обобщить на все символы в строке? Она может содержать любые Unicode code points...

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение06.08.2022, 03:21 


27/09/19
189
Спасибо, теперь понял, заработало все хорошо. Правильно ли я оформил, используя ваши рекомендации? Насколько я понял, просто нужно, чтобы не было """, а также не было ' ' '. Нужно этих ситуаций избегать, чтобы внутри двойных были однократные и наоборот. Но проблема ведь в том, что мы заранее не знает чему будет равен text, потому не знаем - какие там кавычки нужно организовывать. Неужели реально застраховаться от такой проблемы?

Вроде как код сработал правильно на этот раз.

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
import os, pyperclip, subprocess

text = "\x27"

quote = '\x22'

print('Как назвать файл?')

y = input()

folder = 'C:/Users/e8921/OneDrive/Рабочий стол'

file_name = f'{y}.py'

path = os.path.join(folder, file_name)

copy = 'pyperclip.copy('

close = ')'

with open(path,'w', encoding="utf-16") as tw:
     tw.write(f"import os, pyperclip, subprocess\n{copy}{quote}{text}{quote}{close}")


-- 06.08.2022, 03:23 --

aitap в сообщении #1561874 писал(а):
Она может содержать любые Unicode code points...

Точно ли этот частный случай поможет решить проблему в общем случае?)

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение06.08.2022, 11:51 
Аватара пользователя


21/05/16
4283
Аделаида
kot-obormot в сообщении #1561906 писал(а):
Но проблема ведь в том, что мы заранее не знает чему будет равен text, потому не знаем - какие там кавычки нужно организовывать.

Хотя бы str.replace погуглите.
kot-obormot в сообщении #1561906 писал(а):
Неужели реально застраховаться от такой проблемы?

Да, абсолютно.
kot-obormot в сообщении #1561906 писал(а):
Насколько я понял, просто нужно, чтобы не было """, а также не было ' ' '. Нужно этих ситуаций избегать, чтобы внутри двойных были однократные и наоборот.

Здесь надо сделать очень важное уточнение - избегать не в пользовательском вводе, а в аргументе для paperclip.copy.

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение06.08.2022, 13:51 


27/09/19
189
kotenok gav в сообщении #1561925 писал(а):
Здесь надо сделать очень важное уточнение - избегать не в пользовательском вводе, а в аргументе для paperclip.copy.

Спасибо, я кажется понял. Вот программа, которая будет удалять все кавычки.

Используется синтаксис Python
 

text = '123"4\x27599'

replaced_text = text.replace('\x22', '')

replaced_text = replaced_text.replace("\x27", "")

print(replaced_text)


А эта программа будет считать количество двойных кавычек. Если их окажется нечетное количество, то будет их всех удалять. А если четное, то ничего не будет делать, просто будет код исполняться дальше) Аналогично для "одинарных" кавычек.

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
text='Happy New "Year'

count = 0

for i in text:
    if i == '\x22':
        count = count + 1

a = str(count)
print(a)
b=2
                           
if int(a) % b == 0:
    continue
else:
    print("буфер обмена содержит нечетное число кавычек, программа их удалит, введите что-нибудь для подтверждения")
    t = input()
    # сюда вставляем фрагмент программы, которая уничтожает двойные кавычки
 


-- 06.08.2022, 13:53 --

Теоретически, можно уничтожать не все кавычки. Но принцип, по которому будут удаляться одна из кавычек, в общем случае описать невозможно, как мне кажется.

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 00:51 
Аватара пользователя


21/05/16
4283
Аделаида
kot-obormot в сообщении #1561936 писал(а):
Вот программа, которая будет удалять все кавычки.

А зачем вы удаляете ординарные кавычки? А двойные не удаляйте, а заменяйте на \".

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 01:38 


27/09/19
189
kotenok gav в сообщении #1561983 писал(а):
А зачем вы удаляете ординарные кавычки?

А вдруг возникнет комбинация в буфере обмена ' ' '? Тогда ведь нет закрывающей одинарной кавычки.
kotenok gav в сообщении #1561983 писал(а):
А двойные не удаляйте, а заменяйте на \".

А не лучше будет обратную косую черту? /"

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 01:49 
Заслуженный участник
Аватара пользователя


16/07/14
5691
Москва
Вы не тем занимаетесь, требовать от пользователя, чтобы он в буфер обмена добавлял только строки определенного вида - очень плохой стиль.
Вам нужно получить python-выражение, интерпретация которого даст данную строку text. Для этого есть два варианта: воспользоваться функцией repr, которая решает ровно эту задачу, или же закодировать строку во что-то, заведомо не содержащее плохих символов, а потом раскодировать.

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 02:12 


27/09/19
189
mihaild в сообщении #1561986 писал(а):
воспользоваться функцией repr

Спасибо, а как perp загуглить правильно? У меня чего-то не получается.

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 03:17 
Аватара пользователя


11/06/12
10026
лучший.магия.интрига
https://www.google.com/search?q=repr, результаты на первой же странице лично мне кажутся полезными.

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 04:13 


27/09/19
189
Случайно perp гуглил, а не repr. Спасибо) Вроде так должно быть)

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
import os, pyperclip, subprocess

x = pyperclip.paste()

text = repr(x)

quote = '\x22'

b = text

print('Как назвать файл?')

y = input()

folder = 'C:/Users/e8921/OneDrive/Рабочий стол'

file_name = f'{y}.py'

path = os.path.join(folder, file_name)

copy = 'pyperclip.copy(r'

close = ')'

with open(path,'w', encoding="utf-16") as tw:
     tw.write(f"import os, pyperclip, subprocess\n{copy}{quote}{b}{quote}{close}")
     
 


Но только вот там после копирования скобки возникла проблема. Подсвечивает синтаксис, что так нельзя)

И еще. Почему-то через раз созданная программа из двух строчек работает, то есть не копируется текст в буфер обмена, ничего не происходит. А когда ничего не происходит, я пытаюсь запустить хотя бы какой-нибудь код из этой программы, но и это не срабатывает. Причем какая-то странная ошибка появляется. Ругается на пустую строчку!

Изображение

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение11.08.2022, 13:24 


27/09/19
189
Видимо я написал какую-то ересь)

 Профиль  
                  
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение11.08.2022, 22:10 
Заслуженный участник


31/12/05
1206
Кодировка по умолчанию для файла с программой на Python - UTF-8, а не UTF-16.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group