如何在python中读取文本文件并将变量输出到csv中

时间:2017-12-11 17:41:09

标签: python forms csv email spreadsheet

我创建了一个网站,每当有人发送表格(例如询问我的工作)时,我都会收到一封电子邮件,因此我尝试自动执行此操作,我已经下载了相关的电子邮件并删除了不相关的数据但是我一直坚持如何导入.txt文件并将其导出到电子表格(.csv文件)这是我试图从中提取数据的.txt文件:

`

Name:
someone

Email:
someone@gmail.com

Site: someone.com

Remote IP: 192.168.0.1

-----------------------------------------------------------------------

Name:
someone51

Email:
someone1@gmail.com


Site: someone1.com

Remote IP: 192.168.0.2

-----------------------------------------------------------------------
Name:
someone

Email:
someone52@gmail.com

Site: someone.com

Remote IP: 192.168.0.5

-----------------------------------------------------------------------

Name:
someone51

Email:
someone52532222@gmail.com


Site: someone1.com

Remote IP: 192.168.0.76

-----------------------------------------------------------------------
Name:
someone123

Email:
someone123@gmail.com

Site: someone.com

Remote IP: 192.168.0.21

-----------------------------------------------------------------------

Name:
someone51

Email:
someone1@gmail.com


Site: someone1.com

Remote IP: 192.168.0.2

-----------------------------------------------------------------------

` 显然,我不得不改变确切的数据,但这也是我得到的布局。

所以我问我如何更改此.txt文件并系统地将其放入电子表格

提前谢谢

1 个答案:

答案 0 :(得分:1)

如果我们只是获取文件的一部分,它将更容易使用它:

f = """Name: someone    
Email: someone@gmail.com    
Site: someone.com    
Remote IP: 192.168.0.1"""

因此,假设您知道如何将文件打开到Python中,您应该有一个像上面这样的多行字符串。

现在,如果我们可以安全地说冒号(:)拆分每行中的两列,那么我们所要做的就是 replace 所有这些使用逗号并将此新字符串输出到文件。就这么简单。

为此,我们不需要迭代字符串,我们可以使用str.replace方法一次性替换它们:

f = f.replace(":", ",")

然后f将修改为CSV格式:

Name, someone    
Email, someone@gmail.com    
Site, someone.com    
Remote IP, 192.168.0.1

现在,剩下要做的就是将这些数据写入以.csv结尾的文件:

with open("output.csv", "w") as of:
    of.write(f)

就是这样!您现在可以在任何output.csv查看器中打开CSV,它应该读取文件!

这是我在LibreOffice打开后的样子截图:

table

所以它似乎有效!

<强>更新

因此,上述解决方案需要解决2个问题:

  • 如何阅读文件
  • 如何连接与下一行重叠的行

要读取文件(转换为变量:f),有许多教程,所以我不会深入研究。但基本上,只需:

f = open("input.txt").read()

然后,如果我们现在正在处理f,可能类似于:

Name:
someone

Email:
someone@gmail.com

Site: someone.com

Remote IP: 192.168.0.1

然后我们需要用:\n替换:的出现次数以删除溢出的行。我们还需要将\n\n替换为\n来删除任何双行。

这些2操作可以在一行中完成:

f = f.replace(":\n", ":").replace("\n\n", "\n")

然后,我们可以使用与答案开头所述相同的步骤将数据写入CSV文件。

请注意,在此阶段,您可能需要考虑使用re.sub,因为这会简化代码!