2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение05.08.2022, 21:17 
aitap в сообщении #1561465 писал(а):
Какой файл она в этом случае создаст? Где в нём ошибка?

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

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

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

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

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение05.08.2022, 22:48 
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 
Спасибо, теперь понял, заработало все хорошо. Правильно ли я оформил, используя ваши рекомендации? Насколько я понял, просто нужно, чтобы не было """, а также не было ' ' '. Нужно этих ситуаций избегать, чтобы внутри двойных были однократные и наоборот. Но проблема ведь в том, что мы заранее не знает чему будет равен 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 
kot-obormot в сообщении #1561906 писал(а):
Но проблема ведь в том, что мы заранее не знает чему будет равен text, потому не знаем - какие там кавычки нужно организовывать.

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

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

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

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение06.08.2022, 13:51 
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 
kot-obormot в сообщении #1561936 писал(а):
Вот программа, которая будет удалять все кавычки.

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

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 01:38 
kotenok gav в сообщении #1561983 писал(а):
А зачем вы удаляете ординарные кавычки?

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

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

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 01:49 
Аватара пользователя
Вы не тем занимаетесь, требовать от пользователя, чтобы он в буфер обмена добавлял только строки определенного вида - очень плохой стиль.
Вам нужно получить python-выражение, интерпретация которого даст данную строку text. Для этого есть два варианта: воспользоваться функцией repr, которая решает ровно эту задачу, или же закодировать строку во что-то, заведомо не содержащее плохих символов, а потом раскодировать.

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 02:12 
mihaild в сообщении #1561986 писал(а):
воспользоваться функцией repr

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

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 03:17 
Аватара пользователя
https://www.google.com/search?q=repr, результаты на первой же странице лично мне кажутся полезными.

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение07.08.2022, 04:13 
Случайно 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 
Видимо я написал какую-то ересь)

 
 
 
 Re: Python. Проблема с кириллицей при записи в файл
Сообщение11.08.2022, 22:10 
Кодировка по умолчанию для файла с программой на Python - UTF-8, а не UTF-16.

 
 
 [ Сообщений: 28 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group