1

我对此很陌生。这是我目前拥有的:

import csv

input_file = open('linklist.csv', 'rb')
output_file = open('Link Statements9.txt', 'wb')

reader = csv.reader(input_file, delimiter=',', quoting=csv.QUOTE_NONE)
writer = csv.writer(output_file)

for row in reader:
writer.writerow(row)

这将获取在 csv 中输入的信息并将其打印到 txt,但我想从 csv 上的特定空间(例如第 3 行,第 2 列)获取信息并将其存储为字符串,以便我可以做其他事情与它,我找不到具体如何做到这一点。

这个想法是我在 csv 中输入以下内容:

MPP01, Unit 1, Unit 2, 14336

并将以下内容打印到文本文档中:

Establish link MPP01 at 14336 Kbps to Unit 2.
Terminate link MPP01 at 14336 Kbps from Unit 1. 

任何关于如何实现这一点的想法都将受到欢迎。

4

2 回答 2

2

这应该这样做;如果您只想输出文本,则无需使用 CSV 编写器。

import csv

with open('linklist.csv', 'rb') as input_file, \
        open('Link Statements9.txt', 'w') as output_file:

    for row in csv.reader(input_file, delimiter=',', quoting=csv.QUOTE_NONE):
        link_name, from_unit, to_unit, rate = row
        output_file.write("Establish link %s at %s Kbps to Unit %s.\n"
                          % (link_name, rate, to_unit))
        output_file.write("Establish link %s at %s Kbps from Unit %s.\n"
                          % (link_name, rate, from_unit))

请注意,我正在使用该with open(...) as ...:构造来处理文件,以确保它们始终自动关闭。

于 2013-09-27T23:54:14.253 回答
1

首先,如果要将对象转换为格式化字符串,则应使用该.format方法。中的每一行都reader采用字符串列表的形式,因此您可以非常轻松地将它们插入到格式字符串中。例如,如果你有一个你描述的 csv 行,你可以像这样使用它:

row = ['MPP01', 'Unit 1', 'Unit 2', '14336']

formatted_row = ('Establish link {0} at {3} Kbps to {2}.\n' +
                 'Terminate link {0} at {3} Kbps to {1}.\n').format(*row)

代表解*row包变量,就好像你已经调用了.format(row[0], row[1], row[2], row[3])

其次,如果您正在写入文本文件,而不是 csv 文件,则您不想使用csv.writer,而应该直接写入文件。

with open('Link Statements9.txt', 'wb') as output_file:
    for row in reader:
        output_file.write(('Establish link {0} at {3} Kbps to {2}.\n' +
                           'Terminate link {0} at {3} Kbps to {1}.\n').format(*row)

如果您只想对某些编号的行进行操作,您可以使用enumerate

for index, row in enumerate(reader):
    # make decision based on index here

最后,您可能应该使用该with语句而不是直接打开文件(这更容易),但如果您直接打开它们,请记住在完成后关闭它们。

整个脚本:

import csv

with open('linklist.csv', 'rb') as input_file, open('Link Statements9.txt', 'wb') as output_file:
    reader = csv.reader(input_file, delimiter=',', quoting=csv.QUOTE_NONE)
    for row in reader:
        output_file.write(('Establish link {0} at {3} Kbps to {2}.\n' +
                           'Terminate link {0} at {3} Kbps to {1}.\n').format(*row))
于 2013-09-28T00:07:59.900 回答