Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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 修改CSV文件中的URL字符串-输出文件包含单个单元格中的每个字符_Python_Url_Csv - Fatal编程技术网

Python 修改CSV文件中的URL字符串-输出文件包含单个单元格中的每个字符

Python 修改CSV文件中的URL字符串-输出文件包含单个单元格中的每个字符,python,url,csv,Python,Url,Csv,我正在尝试编写一个函数,它允许我从URL中删除某些元素。这些URL存储在名为Backlink_Test的CSV中。我希望遍历URL列表中的每个项目,从URL中删除不需要的元素,然后将修改后的URL添加到新列表中,然后将其存储在名为Cleaned_URL的新CSV中 代码工作到了我可以打开源文件,运行循环,然后将结果存储到目标文件的程度。然而,我遇到了一个相当恼人的问题:在目标文件中,URL与每个字符一起存储在单个单元格中,而不是将整个URL存储在一个单元格中 这让我很惊讶,因为我做了一个小测试,

我正在尝试编写一个函数,它允许我从URL中删除某些元素。这些URL存储在名为Backlink_Test的CSV中。我希望遍历URL列表中的每个项目,从URL中删除不需要的元素,然后将修改后的URL添加到新列表中,然后将其存储在名为Cleaned_URL的新CSV中

代码工作到了我可以打开源文件,运行循环,然后将结果存储到目标文件的程度。然而,我遇到了一个相当恼人的问题:在目标文件中,URL与每个字符一起存储在单个单元格中,而不是将整个URL存储在一个单元格中

这让我很惊讶,因为我做了一个小测试,在这个测试中,我将内容从CSV复制到另一个CSV,而没有修改任何内容,并且具有多个字符的单词存储得很好。所以我怀疑是for循环造成了问题

如有任何帮助/见解,将不胜感激!下面是代码,并附上了目标文件的截图

import csv

new_strings = []    

#replace unwanted elements and add cleaned strings to new list
with open("Backlink_Test.csv", "rb") as csvfile:
    reader = csv.reader(csvfile)
    for string in reader:
        string = str(string) 
        string = string.replace("www.", "").replace("http://", "").replace("https://", "")
        new_strings.append(string)

new_strings.sort()
print new_strings #for testing only; will be removed once function is working

cleaned_file = open("Cleaned_URLS.csv", "w")
writer = csv.writer(cleaned_file)
writer.writerows(new_strings)
cleaned_file.close()
以下是工作代码:

import csv

new_strings = []    

#replace unwanted elements and add cleaned strings to new list
with open("Backlink_Test.csv", "rb") as csvfile:
    reader = csv.reader(csvfile)
    for string in reader:
        string = str(string) 
        string = string.replace("www.", "").replace("http://", "").replace("https://", "")
        new_strings.append(string)

new_strings.sort()
print new_strings

cleaned_file = open("Cleaned_URLS.csv", "w")
writer = csv.writer(cleaned_file)
for url in new_strings:
    writer.writerow([url])

cleaned_file.close()
csvwriter.writerows需要一个iterable行。一行是一组单元格

你正在给它输入一个字符串列表。因为字符串是一个字母列表,所以在您的示例中,每个字母都被视为一个单元格,而它正是要编写的内容

错误之处在于假设csv.reader输出字符串。它输出行

更新:


这就是Python在循环字符串而不是列表时所做的。检查csv.reader的返回值,并相应地调整代码。特别是,string=strstring正在使您的输入平坦化。

我理解,这是有道理的。你能告诉我应该如何调整代码,以获得正确的输入和作为URL字符串的输出吗?谢谢谢谢,我明白你的意思。那么你会用什么来代替csv.reader呢?我可能会用类似的东西。看起来你没有CSV文件——只有一列——但它说明了API的正确使用。非常感谢,这非常好!我需要清理的最后一点是,目标文件中的所有URL现在都在[]中,但我认为没有办法解决这个问题?当然有办法解决这个问题。只是不做字符串=strstring-它将列表中的csv行展平为它的字符串表示形式。请考虑这一点:STR〔1, 2, 3〕=>〔1, 2, 3〕。
for url in urls:
    writer.writerow([url])