Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以表格格式将干净的数据写入python文件_Python_Regex_Twitter - Fatal编程技术网

如何以表格格式将干净的数据写入python文件

如何以表格格式将干净的数据写入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的新手,我搜索并整理了以下代码,这要感谢给出的代码: 它进行数据剥离,但输出文件格式不是我想要的。输出文本文

问题:从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的新手,我搜索并整理了以下代码,这要感谢给出的代码:

它进行数据剥离,但输出文件格式不是我想要的。输出文本文件在一行中,如

s.no username tweetText 1 abc
这是一条干净的tweet
2 bcd
这是另一条干净的tweet
3 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)
    域名匹配

如果无法通过https识别URL?,则必须填写潜在TLD的列表

试试这个正则表达式:
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)
    域名匹配

如果无法通过https识别URL?,则必须填写潜在TLD的列表


您可以在一个循环中读取、清理并写出这行内容。您还可以使用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描述?如果他们在,就打电话给他们