修改CSV文件中的URL字符串 - 输出文件每个字符单独一格
我正在尝试写一个函数,目的是从网址中删除某些元素。这些网址保存在一个叫做 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])