繁体   English   中英

如何使用 python 通过选择某些部分将文本文件读入 csv

[英]How to use python to read a text file into a csv by picking certain parts

我有一个看起来像这样的文本文件:

目前职位:
仪表工程师
当前工资:
30,000 英镑
经验:
2年
理想位置:
不提供
期待的职位:
智能电表工程师
期望薪水:
30,000 英镑
工作类型:
永久 | 合同 | 温度

目前职位:
双燃料智能电表工程师
当前工资:
30,000 英镑
经验:
4年
理想位置:
不提供
期待的职位:
不提供
期望薪水:
34,999 英镑
工作类型:
永久 | 合同 | 温度

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

如何使用 python 实现这一目标?

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

 f = open("test.txt", "r")
 lines = f.readlines()
 for line in lines:
    print(line)
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]

在将数据转换为csv格式之前,您首先需要重组数据。

尝试这个:

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)

复制样本

Output:

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 ,因为字典对象在 python 2.7 上没有排序,并且会给您的csv文件带来麻烦。 相关的伪OrderedDict理解受到这个答案的启发: Is there an OrderedDict comprehension?

作为旁注 - Python 2.7 正在落伍。 您真的应该考虑将您的项目移至 Python 3.x 基础。

此代码是基本的,但它可能只是解决问题。 它所做的只是读取找到的那一行,上面有数据。 它知道哪条线在,因为它完全假设它的这个例子。

 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM