Python 是否将带有标题的列添加到以制表符分隔的文本文件?
我意识到有一种方法可以使用“awk”添加列 但我不太熟悉这个替代方案,所以我想问一下,是否有一种方法可以使用Python将列添加到以制表符分隔的文本文件中 具体来说,我需要在以下场景中添加一列: 我有以下格式的数据(我意识到格式可能不太清楚,但电话、电子邮件和网站对应不同的列): 我正在为第一列编写解析器。我想在题为“区域”的新栏中添加“实践区域”,在这种情况下,ex将是“CEP”。我遍历该文件,并使用pop函数将该区域与第一列的其余部分分开。然后我将其添加到一个列表中,该列表在函数中消失,因为它没有添加到电子表格中 这是我的剧本:Python 是否将带有标题的列添加到以制表符分隔的文本文件?,python,csv,Python,Csv,我意识到有一种方法可以使用“awk”添加列 但我不太熟悉这个替代方案,所以我想问一下,是否有一种方法可以使用Python将列添加到以制表符分隔的文本文件中 具体来说,我需要在以下场景中添加一列: 我有以下格式的数据(我意识到格式可能不太清楚,但电话、电子邮件和网站对应不同的列): 我正在为第一列编写解析器。我想在题为“区域”的新栏中添加“实践区域”,在这种情况下,ex将是“CEP”。我遍历该文件,并使用pop函数将该区域与第一列的其余部分分开。然后我将其添加到一个列表中,该列表在函数中消失,因为
def parse_ieca_gc(s):
### HANDLE NAME ELEMENT ######
degrees = ['M.A.T.','Ph.D.','MA','J.D.',
'Ed.M.', 'M.A.', 'M.B.A.',
'Ed.S.', 'M.Div.', 'M.Ed.',
'RN', 'B.S.Ed.', 'M.D.', 'M.S.']
degrees_list = []
# check whether the name string has
# an area of practice by
# checking if there's a comma separator
if ',' in s['name']:
# separate area of practice from name
# and degree and bind this to var 'area'
split_area_nmdeg = s['name'].split(',')
area = split_area_nmdeg.pop()
# Split the name and deg by spaces.
# If there's a deg, it will match with one
# of elements and will be stored deg list.
# The deg is removed name_deg list
# and all that's left is the name.
split_name_deg = re.split('\s',split_area_nmdeg[0])
for word in split_name_deg:
for deg in degrees:
if deg == word:
degrees_list.append(split_name_deg.pop())
name = ' '.join(split_name_deg)
预期产量
name phone email website area degrees
D G Albright M.A.
Lannister G. Cersei 111-222-3333 cersei@got.com www.got.com CEP M.A.T.
Argle D. Bargle Ed.M.
Sam D. Man 000-000-1111 dman123@gmail.com www.daManWithThePlan.com Ed.M.
Sam D. Man Ed.M.
Sam D. Man 111-222-333 dman123@gmail.com www.daManWithThePlan.com Ed.M.
D G Bamf M.S.
Amy Tramy Lamy Ph.D.
此代码也不起作用:
fieldnames = ['name','degrees','area','phone','email','website']
with open('ieca_first_col_fake_text.txt','r') as input:
with open('new_col_dict.txt','w') as output:
dict_writer = csv.DictWriter(output, fieldnames, delimiter = '\t')
dict_reader = csv.DictReader(input, delimiter = '\t')
#dict_writer.writeheader(fieldnames)
for row in dict_reader:
print row
dict_writer.writerow(fieldnames)
dict_writer.writerow(row)
请参见此处的答案,一个制表符被删除的文件类似于以制表符作为分隔符的CSV
请参见此处的答案,一个制表符被删除的文件类似于以制表符作为分隔符的CSV
这就是我最后做的:
with open('ieca_first_col_fake_text.txt','r') as input, \
open('new_col_dict.txt', 'w') as output:
dict_reader = csv.DictReader(input, delimiter = '\t')
dict_reader.fieldnames.append('area')
dict_reader.fieldnames.append('degrees')
dict_writer = csv.DictWriter(output,
fieldnames=dict_reader.fieldnames,
delimiter='\t')
for row in dict_reader:
print row
dict_writer.writeheader()
dict_writer.writerow(row)
这就是我最后做的:
with open('ieca_first_col_fake_text.txt','r') as input, \
open('new_col_dict.txt', 'w') as output:
dict_reader = csv.DictReader(input, delimiter = '\t')
dict_reader.fieldnames.append('area')
dict_reader.fieldnames.append('degrees')
dict_writer = csv.DictWriter(output,
fieldnames=dict_reader.fieldnames,
delimiter='\t')
for row in dict_reader:
print row
dict_writer.writeheader()
dict_writer.writerow(row)
当我使用此方法时,它似乎不是以制表符分隔的。此方法引用的帖子不令人满意,在它引用用于创建制表符分隔列的方法之前,不会将其标记为答案。@goldisfine csvreaders接受一个参数,指定要使用的分隔符。默认情况下,它是一个逗号,但如果您只添加kwarg
分隔符=“\t”
,它的工作原理将完全相同。这是一个很小的编辑,这个答案应该被接受。当我使用这个方法时,它看起来并不是以制表符分隔的。这个方法引用的帖子不令人满意,在它引用一个创建制表符分隔列的方法之前,它不会被标记为答案。@goldisfine csvreaders接受一个参数,指定使用哪个分隔符。默认情况下,它是一个逗号,但如果您只添加kwarg分隔符=“\t”
,它的工作原理将完全相同。这是一个很小的编辑,这个答案应该被接受。预期的输出是什么?在这种情况下,ex可能是“CEP”的重复,在一个名为“area”的新专栏中。?@goldisfine,不相关,但请用pep8或类似的格式格式化您的python代码。超过80列的代码很难读取。@goldisfine,也不相关。黄金不好。对金矿开采造成的环境损害作一个简短的调查。你会感到惊讶。预期的输出是什么?在本例中,ex可能是“CEP”,与“area”这一新列的意思相同。?@goldisfine,不相关,但请使用pep8或类似的格式格式化python代码。超过80列的代码很难读取。@goldisfine,也不相关。黄金不好。对金矿开采造成的环境损害作一个简短的调查。你会感到惊讶的。