(Python) Помощь в изменении строки из буфера обмена

#python #clipboard

#python #буфер обмена

Вопрос:

По сути, я копирую кучу списков из https://en.wikipedia.org/wiki/List_of_lists_of_lists в мой буфер обмена. Когда я запускаю свою программу, она добавляет маркеры после и перед каждой строкой.

Например:

 Lists of Iranian films
  

Преобразует в:

 •• Lists of Iranian films ••
  

И так далее. Программа работает, когда я добавляю маркеры перед строкой, но когда я помещаю их после нее, она просто печатает одну длинную строку без каких-либо символов новой строки. Кто-нибудь может сказать мне, что я делаю не так?

Вот код:

 #bulletPointAdder.py   - Adds Wikipedia bullet points to the start and end
#of each line of text on the clipboard

import pyperclip
text=pyperclip.paste()      #paste a big string of text from clipboard into the 'text' string


# Separate lines and add stars
lines = text.split('n')     #'lines' contains a list of all the individual lines up until 'n'
                             #lines= ['list of iserael films', 'list of italian films' ...]

for i in range(len(lines)):         #loop through all indexes in the "lines" list
    lines[i] = '••'   lines[i]   '••'   #add bullets before and after each line

text = 'n'.join(lines)         #put a 'n' in  between the list members (joins them) into a single string
pyperclip.copy(text)
  

В моем буфере обмена:

 List of Israeli films before 1960
List of Israeli films of the 1960s
List of Israeli films of the 1970s
List of Israeli films of the 1980s
  

Буфер обмена вставляется в блокнот:

 ••List of Israeli films before 1960••••List of Israeli films of the 1960s••••List of Israeli films of the 1970s••••List of Israeli films of the 1980s••
  

Комментарии:

1. В чем ваш вопрос? Какой тип text ? Это a list str элементов?

2. Извините, тип его строки скопирован в буфер обмена.

Ответ №1:

Внесите небольшое изменение в свой код (используйте os.перевод строки вместо 'n' ):

 import os
import pyperclip
text=pyperclip.paste()     
                             #paste will paste a big string of text in 'text' string

# Separate lines and add stars
lines = text.split(os.linesep)     #lines contains a list of all the individual lines up cut before newline
                             #lines= ['list of iserael films', 'list of italian films' ...]

for i in range(len(lines)):         #loop through all indexes in the "lines" list
    lines[i] = '••'   lines[i]   '••'   #add bullets before and after each line

text = os.linesep.join(lines)         #put a newline in  between the list members (joins them) into a single string
pyperclip.copy(text)
  

Как правило, «новая строка» относится к любому набору символов, который обычно интерпретируется как сигнализация новой строки, которая может включать:

  • CR LF в DOS / Windows
  • CR на старых компьютерах Mac
  • LF в вариантах Unix, включая современные Mac

CR — это символ ASCII возврата каретки (код 0x0D), обычно представленный как r . LF — это символ перевода строки (код 0x0A), обычно представленный как n .

Кроме того, прочитайте это: https://blog.codinghorror.com/the-great-newline-schism /

Я просто хотел, чтобы вы написали независимое от платформы решение. Следовательно os.linesep

Комментарии:

1. Большое спасибо.. это действительно работает. Можете ли вы сказать мне, что я делал не так? Очень странно, что это не будет работать с символом ‘ n’.

2. Я понимаю.. Еще раз спасибо.