如何使用csv文件中的数据在文本文件中写入行

时间:2014-07-08 09:43:38

标签: python python-2.7 csv

如何告诉Python打开CSV文件,并将每行的所有列合并到新TXT文件的新行中?

解释:

我试图从网站上下载一堆成员资料,用于研究项目。为此,我想写一个TXT文件中所有URL的列表。

网址类似于:website.com-name-country-title-id.html

我编写了一个脚本,为每个成员获取所有这些信息,并将它们保存在CSV文件中的列(名称/国家/标题/ ID)中,如下所示:

mark    japan    rookie    married
john    sweden   expert    single
suzy    germany    rookie    married
etc...

现在我想打开这个CSV并用这样的行写一个TXT文件:

www.website.com/mark-japan-rookie-married.html
www.website.com/john-sweden-expert-single.html
www.website.com/suzy-germany-rookie-married.html
etc...

这是我到目前为止的代码。你可能会说我几乎不知道我在做什么,所以非常感谢帮助!!!

import csv
x = "http://website.com/"
y = ".html"

csvFile=csv.DictReader(open("NameCountryTitleId.csv")) #This file is stored on my computer
file = open("urls.txt", "wb")

for row in csvFile:
    strArgument=str(row['name'])+"-"+str(row['country'])+"-"+str(row['title'])+"-"+str(row['id'])
    try:
        file.write(x + strArgument + y)
    except:
        print(strArgument)

file.close()

运行此操作后我没有收到任何错误消息,但TXT文件完全为空。

2 个答案:

答案 0 :(得分:1)

不使用DictReader,而是使用常规阅读器,以便更轻松地加入行:

import csv

url_format = "http://website.com/{}.html"
csv_file = 'NameCountryTitleId.csv'
urls_file = 'urls.txt'

with open(csv_file, 'rb') as infh, open(urls_file, 'w') as outfh:
    reader = csv.reader(infh)
    for row in reader:
        url = url_format.format('-'.join(row))
        outfh.write(url + '\n')

with语句可确保在代码完成后再次正确关闭文件。

我做了进一步的改变:

  • 在Python 2中,以二进制模式打开CSV文件,csv模块本身处理行结尾,因为正确引用的列数据可以在其中嵌入换行符。
  • 应该以文本模式打开常规文本文件。
  • 在为文件写入行时,请务必添加换行符以描绘行。
  • 使用字符串格式(str.format())比使用字符串连接更灵活。
  • str.join()允许您将一系列字符串与分隔符连接在一起。

答案 1 :(得分:-1)

它实际上非常简单,你正在使用字符串,但是你要打开的文件正在以字节模式打开,因此每次写入失败并将其打印到屏幕上。尝试更改此行:

file = open("urls.txt", "wb")

到此:

file = open("urls.txt", "w")

编辑: 我有所纠正,但我想指出,由于缺少换行符或其他形式的分隔符,您打算以后如何使用这些URL?如果你在每个网址之间添加换行符,那么它们很容易恢复