首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过选取某些部分使用python将文本文件读取到csv中

如何通过选取某些部分使用python将文本文件读取到csv中
EN

Stack Overflow用户
提问于 2019-09-19 23:28:38
回答 3查看 57关注 0票数 0

我有一个文本文件,如下所示:

当前职务:

仪表工程师

当前薪资:

£30,000

体验:

2年

所需位置:

未提供

想要的职位:

智能电表工程师

期望薪资:

£30,000

作业类型:

永久|合同|临时

当前职务:

双燃料智能电表工程师

当前薪资:

£30,000

体验:

4年

所需位置:

未提供

想要的职位:

未提供

期望薪资:

£34,999

作业类型:

永久|合同|临时

每一行都用一个新行拆分,数据集由空格分隔,我想使用python来提取标题下的数据。例如:当前职位:仪表工程师将在当前职位一栏中。然后抓取下一组并将它们放在下一行

我如何使用python来实现这一点?

我是python的新手。我能做的就是读取文件。使用IF挑选数据不起作用。

代码语言:javascript
复制
 f = open("test.txt", "r")
 lines = f.readlines()
 for line in lines:
    print(line)
EN

回答 3

Stack Overflow用户

发布于 2019-09-19 23:34:06

代码语言:javascript
复制
import csv

with open('test.csv', 'rU') as infile:
  reader = csv.DictReader(infile)
  data = {}
  for row in reader:
    for header, value in row.items():
      try:
        data[header].append(value)
      except KeyError:
        data[header] = [value]
票数 0
EN

Stack Overflow用户

发布于 2019-09-20 00:14:28

在将数据转换为csv格式之前,首先需要重新构造数据。

试试这个:

代码语言:javascript
复制
import csv
from collections import OrderedDict

with open('data.txt', 'r') as data, open('output.csv', 'w') as file:
  rows = data.read().split('\n\n')
  output = [
    OrderedDict(
      (k.rstrip(':'), v) for k, v in zip(row.split('\n')[::2], row.split('\n')[1::2])
    ) 
    for row in rows
  ]
  writer = csv.DictWriter(file, fieldnames=output[0].keys(), lineterminator='\n')
  writer.writeheader()
  writer.writerows(output)

Repl sample

输出:

代码语言:javascript
复制
Current job title,Current salary,Experience,Desired location,Desired job title,Desired salary,Job Type
meter engineer,"£30,000",2 years,Not supplied,smart meter engineer,"£30,000",Permanent | Contract | Temp
dual fuel smart meter engineer,"£30,000",4 years,Not supplied,Not supplied,"£34,999",Permanent | Contract | Temp

注意,你需要使用OrderedDict,因为字典对象在Python2.7上是不排序的,并且会给你的csv文件带来麻烦。这里的答案启发了相关的伪OrderedDict理解:Is there an OrderedDict comprehension?

顺便说一句--Python2.7正在日落。您真的应该考虑将您的项目迁移到Python 3.x基础上。

票数 0
EN

Stack Overflow用户

发布于 2019-09-20 01:55:18

这段代码是基本的,但它可能就能做到这一点。它所要做的就是读取找到的数据所在的行。它知道哪条线在上,因为它假设它就是这个例子。

代码语言:javascript
复制
 f = open("test.txt", "r")

if f.mode == 'r': 

  repeat = f.find('Current job title:') #this give how many times 'Current job title is found in the program'

  while repeat >= 1:

    repeat = repeat - 1 #changes repeat by -1 every time you do this counting how many times you run this loop

    print("Job Title:")          #Finds and sets JobTitle to the title of job stated
    JobTitle = f.readline(repeat * 15 - 13)

    print(JobTitle)   #Prints Job Title

    print("Current salary:")            #Repeat from Above
    Pay = f.readline(repeat * 15 - 11)
    print(Pay)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58014424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档