//编辑:这个问题是一个子问题。对于一个简短且更好的示例,它具有更好的答复,请选中This Post
我对python非常陌生,甚至对熊猫也较新。
我已经使用了至少一个月,而且我认为我已经将大多数基础知识都结合在一起了。
我当前的任务是在xslx文件内部的某个空间中将值写入certrain单元中。
情况
我有一个很大的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 [email protected]
2 Donald Trump [email protected]
3 Bill Clinton [email protected]
4 Richard Nixton [email protected]
我知道想要将存储在变量“ item”中的实际地址传递给熊猫的某种“定位”功能,以便找出实际电子邮件在哪一行中。一旦知道地址位于哪一行,我现在就可以告诉熊猫在下一列中写一个“ x”(表示邮件是受保护的)或一个“ o”(表示邮件是不受保护的)。
我完成的数据框可能如下所示:
Finished Dataframe:
Forename Last Name Email Protection
1 John Kennedy [email protected] x
2 Donald Trump [email protected] o
3 Bill Clinton [email protected] x
4 Richard Nixton [email protected] x
我非常感谢您的帮助。
最佳答案
为了确保我理解您有一个受保护的文本文件和一个不受保护的文本文件。我正在做一个很大的假设,即您俩都没有电子邮件。
import pandas as pd
df = pd.read_csv('Protected/Protected G.txt', header = None, sep = " ")
df.columns = ['Protected Emails']
df2 = pd.read_excel('dummy-excel')
if df2['Email'].isin(df) :
df2['Protection'] = 'x'
else :
df2['Protection'] = 'o'
writer = pd.ExcelWriter('ProtectedEmails.xlsx')
df2.to_excel(writer,'Sheet1') #or whatever you want to name your sheet
writer.save()
也许像这样,尽管我不知道电子邮件的文本文件是什么样子。