如何在没有 \n 的情况下从 txt 中获取特定行(Python)

Posted

技术标签:

【中文标题】如何在没有 \\n 的情况下从 txt 中获取特定行(Python)【英文标题】:How to get a specific line from a txt without \n (Python)如何在没有 \n 的情况下从 txt 中获取特定行(Python) 【发布时间】:2020-04-20 13:29:08 【问题描述】:

所以基本上我的代码从我的 txt 中抓取一行并使用 selenium 完成它的工作。问题是每次检查后,我的程序应该给我硒检查后的状态和已检查的行。问题是这两个功能都在不同的def中。硒部分和检查状态部分。

所以我可以做 x = f.readline() 并在检查完成后调用它,这将没有问题,因为 1.def 中需要 x 并且它每次都在改变,我无法改变他的位置。所以我尝试在状态 def 中执行 y = f.readline(),这也应该有效,但是因为我再次调用 readline,这两个变量都发生了变化。我需要它逐行检查和报告。 还有 readline() 复制 \n 这会造成很多麻烦

让我说得更清楚一点。这是更简单的代码

f = open('list.txt', 'r')

def part1():
    x = f.readline()
    xxx = x[0:][:16]
    xxxx = x[17:][:2]
    driver.get('https://website.com')
    elem = driver.find_element_by_name("example")
    elem.send_keys(xxx);
    elem = driver.find_element_by_name("example2")
    elem.send_keys(xxxx);
    ......

def checkpart():
    part1()
    (some sleep code)
    if driver.find_elements_by_xpath("//*[contains(text(), 'checkprocess')]"):
        print('[-] Bad: ', x)
    elif driver.find_elements_by_xpath("//*[contains(text(), 'checkprocess2')]"):
        print('[+] Good: ', x)
    else:
        print('[+] Smthelse: ', x)

(some input questions...)

i = 1

register() //other function thats not needed here//

while i <= input:
        checkpart()
        time.sleep(1)
        i += 1

它有点复杂,我找不到更简单的 readline() 方法。虽然它不允许我在检查部分中显示 x 并且它还复制了 \n

我需要显示当前选中的行(即 x)而不更改它,并且不要在其末尾复制 \n。

正如我所说,这对我来说有点复杂,我做了很多研究,但没有提出任何有用的东西。我也在 php 中发出同样的问题。

【问题讨论】:

这能回答你的问题吗? Getting rid of \n when using .readlines() 【参考方案1】:

您是否尝试过读取文件?然后您可以使用 split 来创建或列出例如:

f = open("list.txt", "r")

f_read = f.read()

f_list = f_read.split("\n")

【讨论】:

以及如何逐行输入selenium def并在检查def中输出相同 我不知道这个 selenium 是什么,但是一旦你有了这个列表,你就可以遍历它并用它做任何你想做的事情。【参考方案2】:

可能print(x, end = "") 就足够了吗?

您能给出额外的要求吗?

或者,您可以使用 x[:-1] 删除最后一个字符,但正如我所观察到的,您已经意识到这种可能性。

--- 编辑 --- 顺便说一句,如上所述,最好将整个文件(或部分)读取到列表中,然后迭代列表。

【讨论】:

都在不同的def中,不会显示。【参考方案3】:

您可以将所有文本读入内存并从那里工作,而不是使用文件句柄本身(变量 f)。您不必担心光标在文件流中的位置。

f = open('list.txt', 'r')
content = f.readlines()
f.close()

for line in content:
    part1(line)
    checkpart(line)

现在您可以轻松处理变量内容

【讨论】:

以及如何逐行输入。正如我所说,我必须将行输入到要检查的硒部分。我也必须在另一个def上显示它。这也是要删除\n的吗? 假设内容是 list.txt 的行列表,您可以遍历该列表并在循环中调用这两个函数。第一个函数不再需要 readline(),您可以将当前条目作为参数传递给两个函数。编辑:我将我的示例改编为此评论【参考方案4】:

您可以在 checkpart() 中读取文件,然后简单地将 x 传递给 part1(x)。为了避免尾随换行,您可以使用 x.rstrip()

f = open('list.txt', 'r')

def part1(x):
    xxx = x[0:][:16]
    xxxx = x[17:][:2]
    driver.get('https://website.com')
    elem = driver.find_element_by_name("example")
    elem.send_keys(xxx);
    elem = driver.find_element_by_name("example2")
    elem.send_keys(xxxx);
    ......

def checkpart():
    x = f.readline().rstrip()
    part1(x)
    (some sleep code)
    if driver.find_elements_by_xpath("//*[contains(text(), 'checkprocess')]"):
        print('[-] Bad: ', x)
    elif driver.find_elements_by_xpath("//*[contains(text(), 'checkprocess2')]"):
        print('[+] Good: ', x)
    else:
        print('[+] Smthelse: ', x)

(some input questions...)

i = 1

register() //other function thats not needed here//

while i <= input:
        checkpart()
        time.sleep(1)
        i += 1

【讨论】:

很抱歉,这是一个非常好的建议,但如何将其传递给第 1 部分。 part1 也需要先使用变量。我是python新手

以上是关于如何在没有 \n 的情况下从 txt 中获取特定行(Python)的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有插件的情况下从特定类别的帖子的 URL 中删除日期?

如何在不使用自定义适配器的情况下从 ListView 获取特定的 TextView (View)?

如何在不复制的情况下从 N 维容器中获取可迭代范围?

如何在不回显的情况下从 shell 脚本中获取密码

如何在没有任何排序参数的情况下从表格底部选择行......?

如何在没有 Linq 的情况下从列表中获取一些对象?