Python:尝试在csv中识别特定的行/列并将其存储为变量,然后在一个句子中打印到txt文件。

Python:尝试在csv中识别特定的行/列并将其存储为变量,然后在一个句子中打印到txt文件。,python,csv,Python,Csv,我对这个很陌生。这就是我目前拥有的: 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: write

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

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. 

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

这应该可以做到;如果只想输出文本,则无需使用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))

请注意,我使用带有open(…)的
作为…:
结构来处理文件,以确保它们始终自动关闭。

首先,如果要将对象转换为格式化字符串,应使用
.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)
*行
表示解压缩变量,就好像调用了
.format(行[0],行[1],行[2],行[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)
如果只想对某些编号的行执行操作,则可以使用
枚举

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))

如果您想输出文本,为什么要使用CSV编写器?谢谢,这非常有用,但当我尝试使用它时,它会将输出全部打印在一行上。我尝试使用\n,但当我在“{2}”之后插入它时,它不起作用。知道如何实现吗?我不知道为什么它会在一行上打印所有内容,但它的方式是错误的。我忘了删除字符串的前导空格,所以第二行缩进得太远了。我改的方式应该更清楚。