修改CSV文件中的URL字符串 - 输出文件每个字符单独一格

-1 投票
2 回答
1190 浏览
提问于 2025-04-18 06:13

我正在尝试写一个函数,目的是从网址中删除某些元素。这些网址保存在一个叫做 Backlink_Test 的CSV文件里。我想逐个处理这个网址列表,去掉不需要的部分,然后把修改后的网址放到一个新列表里,最后把这个新列表存储到另一个叫做 Cleaned_URLs 的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()

2 个回答

1

当你在循环一个字符串而不是列表时,这就是Python的表现。你需要查看一下csv.reader()的返回值,然后相应地调整你的代码。特别是,string = str(string)这行代码会把你的输入变成一维的,也就是把它“压平”了。

1

csvwriter.writerows 这个函数需要你给它一个可以循环的东西,里面包含多行数据。每一行数据又是一个可以循环的东西,里面有多个单元格。

你现在给它的是一个字符串的列表。因为字符串其实就是字母的集合,所以在你的例子里,每个字母都被当成一个单元格来处理,这就是为什么它写出来的就是这些字母。

你犯的错误是以为 csv.reader 输出的是字符串。其实它输出的是多行数据。

更新

for url in urls:
    writer.writerow([url])

撰写回答