簡體   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