【发布时间】:2019-01-01 03:10:13
【问题描述】:
//编辑:这个问题是一个子问题。更短更好的例子,有更好的回复,检查This Post
我对 python 非常陌生,甚至对 pandas 也很陌生。 我已经使用它至少一个月了,我想我已经掌握了大部分基础知识。
我当前的任务是将值写入 xslx 文件内的特定空间中的特定单元格中。
情况
我有一个非常大的 excel 文件,其中包含各种数据,从名称到 电子邮件地址和一切。我还有两个列表(.txt 文件) 与其中的 excel 文件相同的电子邮件地址,但那些 如果电子邮件符合某些安全检查或 不是。根据结果,它们被存储在 “Secured.txt”或“Unsecured.txt”文件。
要在 excel 文件中写入和读取,我使用 pandas。
任务
在 excel 文件中的“电子邮件”列旁边,有一个列,您可以在该列中标记电子邮件是安全的还是不安全的。我的实际任务是插入这些条目,具体取决于电子邮件所在的文本文件。
可能的解决方案
我解决这个问题的方法是读出每个 .txt 文件,并使用列表和 for 循环将每个电子邮件地址存储在一个变量中。遍历这些电子邮件,我知道想要在 excel 文件中查找电子邮件地址的位置并访问它旁边的单元格。 同一行,不同的列。由于电子邮件之前已对其安全验证进行了排序匹配,因此我只需将相应的值放入电子邮件旁边的验证单元格中即可。
问题
我的问题如下:如何根据其中的值处理特定行? 我想找到包含变量“mails”的实际内容的单元格的位置,所以我可以移动到它旁边的单元格。由于我知道所有列的名称,我实际上只需要电子邮件所在行的索引。我得到了 x 坐标并需要 y 坐标。
示例
到目前为止,我所拥有的是 .txt 文件的读数:
import pandas as pd
import os
import re
#fetching the mail adress through indexnumber out of the list
with open('Protected/Protected G.txt', 'r') as file:
#creating the regex pattern to sort out the mail adresses
rgx = '\S+@\S+'
#read the file and convert the list into a string
content = file.readlines()
content_str = ''.join(content)
#get the mails out of the "list" with regex
mails = re.findall(rgx, content_str)
#put each mailadress in a variable
for item in mails:
print(item)
这个虚拟数据框代表我正在使用的 excel 表:
Dummy-Dataframe:
Forename Last Name Email Protection
1 John Kennedy John@gmx.net
2 Donald Trump Donald@gmx.net
3 Bill Clinton Bill@gmx.net
4 Richard Nixton Richard@gmx.net
我知道想要将存储在变量“item”中的实际地址传递给 pandas 的某种“定位”功能以便找出实际电子邮件位于哪一行。 一旦我知道地址在哪一行,我现在可以告诉 pandas 在下一列中写一个“x”,表示邮件受到保护,或者写一个“o”,表示邮件不受保护。
我完成的数据框可能如下所示:
Finished Dataframe:
Forename Last Name Email Protection
1 John Kennedy John@gmx.net x
2 Donald Trump Donald@gmx.net o
3 Bill Clinton Bill@gmx.net x
4 Richard Nixton Richard@gmx.net x
非常感谢您的帮助。
【问题讨论】:
-
这个和问题无关,但是可以直接使用
for adress in mails:。这样你就不需要计算长度也不需要使用range -
改变了这个。赞赏。
-
对不起,我没有解释清楚。通过替换范围循环,您不再需要执行
adress = mails[item]。已经分配了正确的值,可以使用它们,例如for adress in mails: print(adress) -
能否请您发布一个类似于您的数据的虚拟数据框和预期的输出数据框(您想要写入 excel 的方式)。谢谢你。 :)
-
这似乎是this one 的副本?