如何以表格格式将干净的数据写入python文件
问题:从twitter文本中删除超链接、数字和符号,如如何以表格格式将干净的数据写入python文件,python,regex,twitter,Python,Regex,Twitter,问题:从twitter文本中删除超链接、数字和符号,如^&*$etc。tweet文件采用CSV表格格式,如下所示: s.No. username tweetText 1. @abc This is a test #abc example.com 2. @bcd This is another test #bcd example.com 作为python的新手,我搜索并整理了以下代码,这要感谢给出的代码: 它进行数据剥离,但输出文件格式不是我想要的。输出文本文
^&*$etc
。tweet文件采用CSV表格格式,如下所示:
s.No. username tweetText
1. @abc This is a test #abc example.com
2. @bcd This is another test #bcd example.com
作为python的新手,我搜索并整理了以下代码,这要感谢给出的代码:
它进行数据剥离,但输出文件格式不是我想要的。输出文本文件在一行中,如
s.no username tweetText 1 abc
这是一条干净的tweet2 bcd
这是另一条干净的tweet3 efg
这是另一条干净的tweet
如何修复此代码以提供如下所示的输出:
s.No. username tweetText
1 abc This is a test
2 bcd This is another test
3 efg This is yet another test
我认为需要在正则表达式代码中添加一些东西,但我不知道它可能是什么。任何提示或建议都会很有帮助 不要将re.sub()和.lower()表达式一次应用于整个文件,而是尝试在CSV文件中的每一行上迭代,如下所示:
for line in myfile:
line = line.lower()
line = re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",line)
fileout.write(line+'\n')
另外,当您将
与as myfile
表达式一起使用时,无需在程序结束时将其关闭,当您与一起使用时,这会自动完成,而不是将re.sub()和.lower()表达式一次应用于整个文件,请尝试在CSV文件中的每一行上迭代,如下所示:
for line in myfile:
line = line.lower()
line = re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",line)
fileout.write(line+'\n')
另外,当您将与as myfile
表达式一起使用时,无需在程序结束时将其关闭,当您与一起使用时,这将自动完成。请尝试以下正则表达式:
clean\u data='''.join(re.sub(“[@\^&\*\$]”S+\S+[a-z0-9]\.(com | net | org)”,'',data.split())#正则表达式将html从文本中去除
说明:
匹配要替换的字符[@\^&\*\$]
哈希标记上的匹配项#\S+
域名匹配\S+[a-z0-9]\(com | net | org)
clean\u data='''.join(re.sub(“[@\^&\*\$]”S+\S+[a-z0-9]\.(com | net | org)”,'',data.split())#正则表达式将html从文本中去除
说明:
匹配要替换的字符[@\^&\*\$]
哈希标记上的匹配项#\S+
域名匹配\S+[a-z0-9]\(com | net | org)
您可以在一个循环中读取、清理并写出这行内容。您还可以使用CSV模块帮助您构建结果文件
import csv
import re
exp = r"(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"
def cleaner(row):
return [re.sub(exp, " ", item.lower()) for item in row]
with open('input.csv', 'r') as i, open('output.csv', 'wb') as o:
reader = csv.reader(i, delimiter=',') # Comma is the default
writer = csv.writer(o, delimiter=',')
# Take the first row from the input file (the header)
# and write it to the output file
writer.writerow(next(reader))
for row in reader:
writer.writerow(cleaner(row))
csv模块正确地知道如何在项目之间添加分隔符;只要你传递给它一个项目集合
那么,它从输入文件中获取行中的每个项(列)的cleaner
方法是什么,将替换应用于该项的小写版本;然后返回一个列表
代码的其余部分只是打开文件,使用输入和输出文件所需的分隔符配置CSV模块(在示例代码中,两个文件的分隔符都是一个选项卡,但您可以更改输出分隔符)
接下来,输入文件的第一行被读取并写入输出文件。此行没有进行任何转换(这就是它不在循环中的原因)
从输入文件中读取该行会自动将文件指针放在下一行上-因此我们只需在输入行(在读卡器中)中循环,对于每一行应用cleaner函数-这将返回一个列表-然后使用
writer.writerow()
将该列表写回输出文件即可读取该行,将其清除,然后在一个循环中写出来。您还可以使用CSV模块帮助您构建结果文件
import csv
import re
exp = r"(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"
def cleaner(row):
return [re.sub(exp, " ", item.lower()) for item in row]
with open('input.csv', 'r') as i, open('output.csv', 'wb') as o:
reader = csv.reader(i, delimiter=',') # Comma is the default
writer = csv.writer(o, delimiter=',')
# Take the first row from the input file (the header)
# and write it to the output file
writer.writerow(next(reader))
for row in reader:
writer.writerow(cleaner(row))
csv模块正确地知道如何在项目之间添加分隔符;只要你传递给它一个项目集合
那么,它从输入文件中获取行中的每个项(列)的cleaner
方法是什么,将替换应用于该项的小写版本;然后返回一个列表
代码的其余部分只是打开文件,使用输入和输出文件所需的分隔符配置CSV模块(在示例代码中,两个文件的分隔符都是一个选项卡,但您可以更改输出分隔符)
接下来,输入文件的第一行被读取并写入输出文件。此行没有进行任何转换(这就是它不在循环中的原因)
从输入文件中读取该行会自动将文件指针放在下一行上,因此我们只需在输入行中循环(在reader中),对于每一行应用cleaner函数,这将返回一个列表,然后使用
writer.writerow()将该列表写回输出文件
您希望如何从一些文本
到这是一个测试
?感谢Carsten Hagemann指出这个异常。我现在已经纠正了这个例子。尝试在clean_数据中的每个元素写入元素+'\n'或逐行读取文件,并通过从该行提取clean_数据以相同的方式处理它,如果它不是空的,则写入clean_数据+'\n'。您希望如何从一些文本
到这是一个测试
?谢谢Carsten哈格曼指出了这一反常现象。我现在已经纠正了这个例子。尝试在clean_数据中的每个元素写入元素+'\n'或逐行读取文件,并通过从该行提取clean_数据以相同的方式处理它,如果它不是空的,则写入clean_数据+'\n'。哇,你就是那个人!谢谢你的解释,格雷厄姆。它就像我想要的那样工作。现在,如何在每个单词之间添加逗号?示例sno、username、tweetText.dependens这些词是否由tab描述?如果他们在,就打电话给他们