如何在没有 \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)?