सामग्री को फ़ाइल में प्रत्यय विभाजित और प्रत्यय जोड़ें


3

मैं 3 चीजों का प्रयास कर रहा हूं।
1 # फ़ाइल को छोटे भाग में विभाजित करें
2 # विभाजित करते समय मुझे प्रत्येक विभाजन फ़ाइल की शुरुआत में कुछ पाठ जोड़ना होगा। 3 # मुझे प्रत्येक विभाजन फ़ाइल की फ़ाइल के अंत में कुछ पाठ जोड़ने की आवश्यकता है।

मेरे पास 2 जीबी की फाइल है, जिस पर मुझे ऑपरेशन करने की आवश्यकता है। यहाँ मेरे पास फ़ाइल के नमूने के लिए छोटा हिस्सा है। कृपया इस फाइल को प्रत्येक 10 लाइनों के अनुसार विभाजित करें।
उस कच्ची फ़ाइल का उदाहरण जिस पर ऑपरेशन किए जाने की आवश्यकता है: https://drive.google.com/file/d/0BzQ6rtO2VN95c0YzclhySVZYNDQ/view?usp=sharing
मैं प्रत्येक विभाजन फ़ाइल को एक php फ़ाइल के रूप में बनाना चाहता हूं। यहां php फ़ाइल का एक उदाहरण दिया गया है: https://drive.google.com/file/d/0BzQ6rtO2VN95ZjU1WXpjTElCaEE/view?usp=sharing
मुझे बस नई फ़ाइलों की ज़रूरत है PHP फ़ाइल और उन्हें इस तरह दिखना चाहिए:

<?php
$urls = array("tvproduction.agency
","http://tween.agency","http://twelve.agency","http://twenty1.agency
","http://twenty47.agency
","http://twentynine.agency
","http://twentyone.agency
","http://twentysenses.agency
","http://twentysix.agency
","http://twentyten.agency");
?>

मैंने कोशिश की है splitलेकिन यह केवल फ़ाइल को विभाजित करता है।


ऐसा करने के कई तरीके, मेरी व्यक्तिगत पसंद पायथन होगी, लेकिन यह उबंटू के बारे में एक से बढ़कर एक प्रोग्रामिंग सवाल है, इसलिए आप stackoverflow.com पर बेहतर पूछ रहे हैं
कार्ल एच।

कृपया यहां पाठ साझा करने के लिए Google ड्राइव के बजाय पेस्ट.बंटू.कॉम जैसे पास्टबिन का उपयोग करें ।
मुरु

1
क्या आप अपने प्रश्न को संपादित कर सकते हैं और एक नमूना इनपुट जोड़ सकते हैं जो आपके प्रश्न में शामिल आउटपुट में परिणाम देगा?
बाइट कमांडर

हाय जाफर, पाठात्मक प्रश्न के आधार पर, मेरे उत्तर को पोस्ट किया । यद्यपि पाठ स्पष्ट लगता है, आपकी बड़ी फ़ाइल ("कच्ची") की सामग्री ने मुझे थोड़ा भ्रमित किया। क्या आप उल्लेख कर सकते हैं कि मैंने सही धारणा बनाई है?
जैकब व्लिजम

@JacobVlijm ज़रूर मुझे इसकी जाँच करने दें ... :)
जाफर विल्सन

जवाबों:


3

हालाँकि यह सवाल पूरी तरह से स्पष्ट है, उदाहरण (ओं) मेरे लिए पूरी तरह से स्पष्ट नहीं हैं। इसलिए मैं प्रश्न के विवरण पर टिकूंगा।

एक फ़ाइल को बराबर भाग में विभाजित करना, उपसर्ग और प्रत्यय जोड़ना

नीचे दी गई स्क्रिप्ट आपके वर्णन के अनुसार बहुत सटीक रूप से करेगी; यह:

  • फ़ाइल को समान टुकड़ों में विभाजित करें (लाइनों की संख्या)
  • एक उपसर्ग जोड़ें (पहली पंक्ति के रूप में)
  • एक प्रत्यय जोड़ें (अंतिम पंक्ति के रूप में)

इसके अलावा:

  • फ़ाइलों का नाम दिया जाएगा:

    split_1, split_2, split_3
    

    आदि।

  • सभी फाइलें स्क्रिप्ट की वर्किंग डायरेक्टरी में बनाई जाएंगी

एक उदाहरण

एक फ़ाइल, जैसे:

aap
noot
mies
wim
zus
jet
teun
vuur
gijs
aardappel
pinda
aap
noot
mies
wim
...

विभाजित किया जाएगा, जैसे:

something_before
aap
noot
mies
wim
zus
jet
teun
vuur
gijs
aardappel
something_after

आदि

लिपी

#!/usr/bin/env python3

# --- set the file, the prefix , suffix and chunksize below
f = "/home/jacob/Bureaublad/test"
prefix = "something_before"
suffix = "something_after"
chunksize = 10

# --- don't change anything below
n = 1
nfile = 1

with open(f) as read:
    for l in read:
        if (n-1) % chunksize == 0:
            s = prefix+"\n"; a = ""
        elif n%chunksize == 0:
            a = suffix; s = ""
        else:
            a = ""; s = ""
        open("split_"+str(nfile), "a+").write(s+l+a)
        if n%chunksize == 0:
            nfile += 1    
        n += 1
# add the suffix to the last file if it is "incomplete"
last = suffix if a == "" else ""
open("split_"+str(nfile), "a+").write(last)

कैसे इस्तेमाल करे

  1. एक खाली फ़ाइल में स्क्रिप्ट की प्रतिलिपि बनाएँ, इसे सहेजें split_chunks.py
  2. स्क्रिप्ट के मुख्य भाग में, आपकी बड़ी फ़ाइल का पथ, उपसर्ग, प्रत्यय और विखंडू को सेट करें (विभाजित करने के लिए लाइनों की संख्या)

    # --- set the file, the prefix , suffix and chunksize below
    f = "/home/jacob/Bureaublad/test"
    prefix = "something_before"
    suffix = "something_after"
    chunksize = 10
  3. कमांड के साथ स्क्रिप्ट चलाएँ:

    python3 /path/to/split_chunks.py
    

व्याख्या

... का पालन करेंगे, सोने की जरूरत :)


मुझे आपका जवाब पसंद है ... यह वही है जिसकी मुझे तलाश थी। धन्यवाद।
जाफर विल्सन

@JafferWilson आह, यह काम करता है महान!
जैकब व्लिजम

3

यह उद्धृत करने का अधिकार प्राप्त करने के लिए थोड़ा मुश्किल है (मुझे लगता है क्योंकि हुड के तहत splitआह्वान bash - c ' ... 'होता है), लेकिन जीएनयू के हाल के संस्करण splitएक --filterकमांड प्रदान करते हैं जो आपको ऐसा करने की अनुमति देनी चाहिए - उदाहरण के लिए उपयोग करनाsed

split -l 10 --filter='sed -e '\''1i\header text'\'' -e '\''$a\footer text'\'' > $FILE' file

या (और भी सरल), के साथ printf

split -l 10 --filter='{ printf "header text\n"; cat - ; printf "footer text\n"; } > $FILE' file

वर्णन करने के लिए, fileजैसा कि दिया गया है

printf '%03d\n' {1..100} > file

यानी 001 से 100 तक की संख्याओं वाली लाइनें

split -l 10 --filter='{ 
  printf "header line 1\nheader line 2\n"
  cat - 
  printf "footer line 1\nfooter line 2\n"
  } > $FILE' file

आउटपुट फ़ाइलें दे रहा है

$ ls xa?
xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

उदाहरण के लिए

$ cat xad
header line 1
header line 2
031
032
033
034
035
036
037
038
039
040
footer line 1
footer line 2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.