我正在尝试读取一个大的日志文件,该文件已使用不同的定界符(旧式更改)进行了解析。
此代码有效
import os, subprocess, time, re
import pandas as pd
for root, dirs, files in os.walk('.', topdown=True):
for file in files:
df = pd.read_csv(file, sep='[,|;: \t]+', header=None, engine='python', skipinitialspace=True)
for index, row in df.iterrows():
print(row[0], row[1])
此方法适用于以下数据
user1@email.com address1
user2@email.com;address2
user3@email.com,address3
user4@email.com;;address4
user5@email.com,,address5
问题1::输入文件中的以下行将破坏代码。我希望将其解析为2列(而不是3列)
user6@email.com,,address;6
问题2:我希望替换地址中所有的单引号和双引号,但以下两种方法似乎都不起作用。
df[1]=df[1].str.replace('"','DQUOTES')
df.replace('"', 'DQUOTES', regex=True)
请帮助!
答案 0 :(得分:0)
您可以先将文件读入一列,然后在熊猫中逐步进行处理:
n=1
)[0]
)(在此处您可能要从列表中删除空格分隔符)。如果地址中包含逗号和分号等,那么您当然不需要此步骤。
import io
s= """user1@email.com address1
user2@email.com;address2
user3@email.com,address3
user4@email.com;;address4
user5@email.com,,address5
user6@email.com,,address;6
user6@email.com,,address with "double quotes"
user6@email.com,,address with 'single quotes'
"""
df = pd.read_csv(io.StringIO(s), sep='\n', header=None)
df = df[0].str.split('[,|;: \t]+', 1, expand=True).rename(columns={0: 'email', 1: 'address'})
df.address = df.address.str.replace('\'|"', 'DQUOTES')
df.address = df.address.str.split('[,|;:]+', 1, expand=True)[0] #depending on what you need
结果:
email address
0 user1@email.com address1
1 user2@email.com address2
2 user3@email.com address3
3 user4@email.com address4
4 user5@email.com address5
5 user6@email.com address
6 user6@email.com address with DQUOTESdouble quotesDQUOTES
7 user6@email.com address with DQUOTESsingle quotesDQUOTES