Строка Python не работает для конечных двойных кавычек - PullRequest
2 голосов
/ 30 апреля 2019

Я пытаюсь выполнить задачу автоматически, используя скрипт Python, но столкнулся с этим странным явлением. Я искал то же самое в SO, но это немного отличается, поэтому я спрашиваю здесь, используя упрощенный пример.
У меня есть файл с именем test1.txt ниже.

"https://papers.nips.cc/paper/7286-efficient-algorithms-for-non-convex-isotonic-regression-through-submodular-optimization" ## Efficient Algorithms for Non-convex Isotonic Regression through Submodular Optimization
"https://papers.nips.cc/paper/7287-structure-aware-convolutional-neural-networks" ## Structure-Aware Convolutional Neural Networks
"https://papers.nips.cc/paper/7288-kalman-normalization-normalizing-internal-representations-across-network-layers" ## Kalman Normalization: Normalizing Internal Representations Across Network Layers
"https://papers.nips.cc/paper/7289-hogwild-gibbs-can-be-panaccurate" ## HOGWILD!-Gibbs can be PanAccurate

и скрипт python quest.py

import re

with open('test1.txt') as f:
    for line in f:
        #print line
        link = re.sub(" ##.*","",line)
        print link
        link1 = link.strip('\"')
        print link1

Когда я выполняю это python quest.py, я получаю

"https://papers.nips.cc/paper/7286-efficient-algorithms-for-non-convex-isotonic-regression-through-submodular-optimization"

https://papers.nips.cc/paper/7286-efficient-algorithms-for-non-convex-isotonic-regression-through-submodular-optimization"

"https://papers.nips.cc/paper/7287-structure-aware-convolutional-neural-networks"

https://papers.nips.cc/paper/7287-structure-aware-convolutional-neural-networks"

"https://papers.nips.cc/paper/7288-kalman-normalization-normalizing-internal-representations-across-network-layers"

https://papers.nips.cc/paper/7288-kalman-normalization-normalizing-internal-representations-across-network-layers"

"https://papers.nips.cc/paper/7289-hogwild-gibbs-can-be-panaccurate"

https://papers.nips.cc/paper/7289-hogwild-gibbs-can-be-panaccurate"

Я хочу напечатать ссылку сначала с двойными кавычками (= ссылка), а затем без двойных кавычек (= ссылка1). Но почему я вижу в конце двойную кавычку для ссылки1?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Python's str.strip([chars]) удалит начальное и конечное значение chars, но остановится, как только достигнет символа, не входящего в chars.

Похоже, что link заканчиваетсясимвол новой строки, и зачистка останавливается, даже не достигнув двойной кавычки.(Подсказка: print добавляет только одну новую строку, и в вашем выводе у вас есть две.)

Чтобы удалить двойные кавычки и символы новой строки:

link1 = link.strip('"\n')

Также стоит упомянуть (как@glibdud отмечает в комментариях), причина, по которой ссылки заканчивались символом новой строки, заключалась в том, что файловый итератор не удаляет символы новой строки, равно как и выражение sub (поскольку . не включает символ новой строки; чтобы включить его, добавьте re.DOTALL флаг регулярного выражения).

1 голос
/ 30 апреля 2019

Просто лишите двойных кавычек и новой строки, если вы хотите печатать без кавычек, и только лишних строк, если вы хотите печатать с двойными кавычками

import re

with open('file.txt') as f:
    for line in f:
        if line.strip():
            #print line
            link = re.sub(" ##.*", "", line)
            #Print with double quotes
            print link.strip('\n')
            #Print without double quotes by replacing double quotes with empty char
            print link.strip('"\n')

            #Print without double quotes by removing double quotes entirely
            #print link.strip("\"")

Выход будет тогда

"https://papers.nips.cc/paper/7286-efficient-algorithms-for-non-convex-isotonic-regression-through-submodular-optimization"
https://papers.nips.cc/paper/7286-efficient-algorithms-for-non-convex-isotonic-regression-through-submodular-optimization
"https://papers.nips.cc/paper/7287-structure-aware-convolutional-neural-networks"
https://papers.nips.cc/paper/7287-structure-aware-convolutional-neural-networks
"https://papers.nips.cc/paper/7288-kalman-normalization-normalizing-internal-representations-across-network-layers"
https://papers.nips.cc/paper/7288-kalman-normalization-normalizing-internal-representations-across-network-layers
"https://papers.nips.cc/paper/7289-hogwild-gibbs-can-be-panaccurate"
https://papers.nips.cc/paper/7289-hogwild-gibbs-can-be-panaccurate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...