脚本将信息从.txt提取到.csv以在中使用

2024-06-06 20:11:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理大量文件(~4gb),这些文件都包含1到100个条目,格式如下(两个之间***是一个条目):

***
Type:status
Origin: @z_rose yes
Text:  yes
URL: 
ID: 95482459084427264
Time: Mon Jul 25 08:16:06 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 20776334 
Hashtags: 
***
***
Type:status
Origin: @aaronesilvers text
Text:  text
URL: 
ID: 95481610861953024
Time: Mon Jul 25 08:12:44 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 2226621 
Hashtags: 
***
***
Type:status
Origin: @z_rose text
Text:  text and stuff
URL: 
ID: 95480980026040320
Time: Mon Jul 25 08:10:14 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 20776334 
Hashtags: 
***

现在我想以某种方式将这些导入熊猫进行质量分析,但显然我必须将其转换为熊猫可以处理的格式。因此,我想编写一个脚本,将上述内容转换成如下所示的.csv格式(User是文件名):

User   Type    Origin              Text  URL    ID                Time                          RetCount  Favorite  MentionedEntities  Hashtags
4012987 status  @z_rose yes         yes   Null   95482459084427264  Mon Jul 25 08:16:06 CDT 2011  0           false  20776334            Null
4012987 status  @aaronsilvers text  text Null    95481610861953024   Mon Jul 25 08:12:44 CDT 2011  0           false   2226621            Null   

`

(很抱歉格式化,但你明白了) 我真的不知道从哪里开始,因为我对脚本语言非常陌生,什么脚本语言适合这个任务?我知道一些脚本语言,但不熟悉它们的局限性,我宁愿不花几个小时学习一种却发现这是不可能的。你能把我推到正确的方向吗?你知道吗

提前谢谢!你知道吗


Tags: textidfalseurltimetypestatusorigin
2条回答

我建议您在输入文件中使用逗号(而不是空格)作为分隔符,尤其是因为有些输入值中嵌入了空格。如果你和熊猫一起工作,那么看在上帝的份上,至少要学习Python的基本知识。你知道吗

vars = ['User', 'Type', 'Origin', 'Text', 'URL', 'ID', 'Time', \
    'RetCount', 'Favorite', 'MentionedEntities', 'Hashtags']

user = '12345'
userfileName = '{}.txt'.format(user)

items = {}
for var in vars:
    items[var]=var
print (','.join([items[var] for var in vars]))

first=True
with open(userfileName) as userfile:
    for line in userfile:
        if line.startswith('*'):
            continue
        if line.startswith('Type'):
            if first:
                first=False
            else:
                print (','.join([items[var] for var in vars]))
            items = {}
            for var in vars:
                items[var]=''
            items['User']=user
        p=line.find(':')
        itemName=line[:p]
        itemValue=line[1+p:].strip()
        items[itemName]=itemValue

print (','.join([items[var] for var in vars]))

假设文件有常规的12行块,我建议使用以下字典构建方法:

infile = open(....)

records = []

# Get one 12-line block and split the lines, when possible
block = [infile.readline().strip().split(':', 1) for i in range(12)]

# Repean as needed
while block[0][0]:
    # Convert the non-star lines to a dictionary
    records.append(dict(x for x in block if len(x)==2))
    block = [infile.readline().strip().split(':', 1) for i in range(12)]

data = pd.DataFrame(records)
print(data.columns)
# Index(['Favorite', 'Hashtags', 'ID', 'MentionedEntities', 
#        'Origin', 'RetCount','Text', 'Time', 'Type', 'URL'],
# dtype='object')

相关问题 更多 >